如何使用python API在bigquery中创建新视图?

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)


Ric*_*ane 5

注意:这在库的 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)


Fel*_*ffa 4

Web UI 或 bq 工具所做的一切都是通过 BigQuery API 完成的,所以不要放弃:)。

创建视图类似于创建表,只需确保在调用 时有一个包含视图属性的表资源tables.insert()

  • 使用“bq”工具创建视图,但使用“--apilog”选项。这将准确地显示调用中使用了哪些参数。 (2认同)