Bra*_*vis 3 python google-bigquery
我有一些代码可以自动生成一堆不同的SQL查询,我希望将这些查询插入到bigquery中以生成视图,但我遇到的一个问题是这些视图需要每晚动态生成,因为它们的性质会发生变化的数据.所以我希望能够使用google bigquery api for python来创建视图.我理解如何使用'bq'命令行工具来完成它,但我希望能够直接在代码中构建它,而不是使用shell来运行bq.我玩过提供的代码
https://cloud.google.com/bigquery/bigquery-api-quickstart
我不明白如何使用这段代码创建一个视图,而不是只返回SELECT语句的结果.我可以在这里看到有关执行表插入的文档
https://cloud.google.com/bigquery/docs/reference/v2/tables/insert
但这指的是使用REST API生成新表,而不是上面提供的示例.
这是不可能的吗?我应该让步并使用bq吗?
谢谢
***针对费利佩的评论提出了一些其他问题.
表资源文档表明存在许多必填字段,其中一些字段即使我不完全理解它们要求的内容也是有意义的,其他字段则没有.例如,externalDataConfiguration.schema.这是指我正在连接的数据库的模式(我认为是这样),还是用于存储数据的模式?
那么externalDataConfiguration.sourceFormat呢?由于我正在尝试查看预先存在的数据库,因此我不确定我是否了解源格式的相关性.它是我正在制作视图的数据库的源格式吗?我该如何识别?
和externalDataConfiguration.sourceUris [],我没有将新数据导入数据库,所以我不明白这个(或前一个元素)是如何需要的.
架构怎么样?
tableReference.datasetId,tableReference.projectId和tableReference.tableId是不言自明的.
类型将是view,view.query将是用于生成视图的实际sql查询.所以我明白为什么那些是制作视图所必需的,但我不理解其他部分.
你能帮我理解这些细节吗?
谢谢,布拉德
小智 6
使用https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/insert
假设您添加授权,请提交以下内容
{
"view": {
"query": "select column1, count(1) `project.dataset.someTable` group by 1",
"useLegacySql": false
},
"tableReference": {
"tableId": "viewName",
"projectId": "projectName",
"datasetId": "datasetName"
}
}
Run Code Online (Sandbox Code Playgroud)
或者在Python中使用,假设您有一个服务密钥设置和环境变量GOOGLE_APPLICATION_CREDENTIALS =/path/to/my/key.需要注意的是,据我所知,这只能使用遗留sql创建视图,并且只能使用遗留sql查询扩展,尽管直接API方法允许使用遗留或标准.
from google.cloud import bigquery
def create_view(dataset_name, view_name, project, viewSQL):
bigquery_client = bigquery.Client(project=project)
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(view_name)
table.view_query = viewSQL
try:
table.create()
return True
except Exception as err:
print(err)
return False
Run Code Online (Sandbox Code Playgroud)
注意:这在库的 0.28.0 中发生了一些变化 - 有关更多详细信息,请参阅以下内容: Google BigQuery:通过 Python google-cloud-bigquery 版本 0.27.0 与 0.28.0 创建视图
我的示例函数
# create a view via python
def create_view(dataset_name, view_name, sqlQuery, project=None):
try:
bigquery_client = bigquery.Client(project=project)
dataset_ref = bigquery_client.dataset(dataset_name)
table_ref = dataset_ref.table(view_name)
table = Table(table_ref)
table.view_query = sqlQuery
table.view_use_legacy_sql = False
bigquery_client.create_table(table)
return True
except Exception as e:
errorStr = 'ERROR (create_view): ' + str(e)
print(errorStr)
raise
Run Code Online (Sandbox Code Playgroud)
Web UI 或 bq 工具所做的一切都是通过 BigQuery API 完成的,所以不要放弃:)。
创建视图类似于创建表,只需确保在调用 时有一个包含视图属性的表资源tables.insert()。
| 归档时间: |
|
| 查看次数: |
3091 次 |
| 最近记录: |