【问题标题】:CREATE OR REPLACE TABLE using the Google BigQuery Python library使用 Google BigQuery Python 库创建或替换表
【发布时间】: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。

标签: python google-bigquery


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 2021-09-13
    • 2021-06-27
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多