如何使用 BigQuery Python API 附加查询结果

Posted

技术标签:

【中文标题】如何使用 BigQuery Python API 附加查询结果【英文标题】:How to append query results using BigQuery Python API 【发布时间】:2020-09-12 04:20:17 【问题描述】:

我找不到将查询结果附加到 BigQuery 中已存在且按小时分区的表的方法。 我只找到了这个解决方案:https://cloud.google.com/bigquery/docs/writing-results#writing_query_results。

job_config = bigquery.QueryJobConfig(destination=table_id)

sql = """SELECT * FROM table1 JOIN table2 ON table1.art_n=table2.artn"""

# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config)  # Make an API request.
query_job.result()  # Wait for the job to complete.

但是向bigquery.QueryJobConfig 提供目标表会覆盖它,我没有发现bigquery.QueryJobConfig 可以选择指定if_exists 或其他东西。据我了解,我需要申请job.insert来查询结果,但我不明白如何。

我也没有找到任何好的建议,也许有人可以指点我吗?

以防万一,我的实际查询很大,我从单独的 JSON 文件中加载它。

【问题讨论】:

【参考方案1】:

创建job_config时,需要将write_disposition设置为WRITE_APPEND

[..]
job_config = bigquery.QueryJobConfig(
    allow_large_results=True, 
    destination=table_id, 
    write_disposition='WRITE_APPEND'
)
[..]

见here。

【讨论】:

【参考方案2】:

您可以添加以下行以将数据附加到现有表中:

job_config.write_disposition = 'WRITE_APPEND'

完整代码:

from google.cloud import bigquery
client = bigquery.Client()
job_config = bigquery.QueryJobConfig(destination="myproject.mydataset.target_table")
job_config.write_disposition = 'WRITE_APPEND'   
sql = """SELECT * FROM table1 JOIN table2 ON table1.art_n=table2.artn"""
query_job = client.query(sql, job_config=job_config)
query_job.result()

【讨论】:

【参考方案3】:

您要查找的参数称为write_disposition。您想使用 WRITE_APPEND 追加到表中。

【讨论】:

以上是关于如何使用 BigQuery Python API 附加查询结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 BigQuery Python API 附加查询结果

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

如何使用调用 UDF 的 Python 脚本来使用 BigQuery API

如何使用 Google BigQuery python API 获得超过 100,000 个响应结果?

使用 python 和 BigQuery API 获取 BigQuery 数据集中的表列表

如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?