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

How to append query results using BigQuery Python API

我找不到将查询结果附加到 BigQuery 中已存在且按小时分区的 table 的方法。 我只找到了这个解决方案: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 提供目的地 table 会覆盖它,而且我没有发现 bigquery.QueryJobConfig 可以选择指定 if_exists 或其他内容。据我了解,我需要应用job.insert来查询结果,但我不明白如何。

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

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

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

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()

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

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

参见 here

您要查找的参数称为 write_disposition。您想要使用 WRITE_APPEND 附加到 table.