使用 Google BigQuery Python 库创建或替换表

Posted

技术标签:

【中文标题】使用 Google BigQuery Python 库创建或替换表【英文标题】:CREATE OR REPLACE TABLE using the Google BigQuery Python library 【发布时间】:2020-01-31 23:04:58 【问题描述】:

我的 Python 代码是这样的:

from google.cloud import bigquery

client = bigquery.Client(
                        project='my-project',
                        credentials=credentials,
                        )
sql = '''
        CREATE OR REPLACE TABLE `my-project.my_dataset.test` AS
            WITH some_table AS (
              SELECT * FROM `my-project.my_dataset.table_1` 
            ),
            some_other_table AS (
              SELECT id, some_column FROM my-project.my_dataset.table_2
            )
            SELECT * FROM some_table 
            LEFT JOIN some_other_table ON some_table.unique_id=some_other_table.id
        '''

query_job = client.query(sql)

query_job.result()

查询在 Google BigQuery 控制台 UI 中有效,但在从 Python 执行上述操作时无效。

我知道通过使用 CREATE OR REPLACE 这是一个“DDL”请求,我无法从 Python 库中弄清楚如何执行该请求。您可以在 job.config 中设置目标表,这使您可以创建表,但是您无法获得 CREATE OR REPLACE 功能。

感谢您的帮助。

【问题讨论】:

这在什么方面“不起作用”?您是否收到某种错误消息?你想如何或在哪里运行它? 你使用什么版本的 Python 库?旧版本默认使用 Legacy SQL 方言,因此您可能需要升级或在客户端属性中指定标准 SQL。 【参考方案1】:

在仔细查看文档后,我可以说Python SDK for BigQuery 没有指定将DDL 语句作为查询执行的方法。您可以找到您正在使用的query 函数here 的文档化代码。如您所见,query 参数需要 SQL 语句。

尽管如此,我试图重现您的问题,但它对我有用。我可以通过使用DDL 语句来完美地创建表格,就像您尝试做的那样。因此我们可以得出结论,API 将 DDL 视为 SQL 的子集。 我建议您评论您收到的错误,以便我可以为您提供更好的支持。

【讨论】:

以上是关于使用 Google BigQuery Python 库创建或替换表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 google-api-python-client 设置 BigQuery 配置属性?

在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF

使用 Google BigQuery Python 库创建或替换表

BigQuery 使用 Python Google Cloud 库将日期插入“DATE”类型字段

Google BigQuery:通过 Python google-cloud-bigquery 版本 0.27.0 与 0.28.0 创建视图

使用 Python,将 google.cloud.bigquery.job.query.QueryJob 输出保存到本地 JSON 文件