如何使用 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?