无法使用 BigQuery Python API 设置目标表
Posted
技术标签:
【中文标题】无法使用 BigQuery Python API 设置目标表【英文标题】:Cannot set destination table with BigQuery Python API 【发布时间】:2019-10-31 15:32:48 【问题描述】:我最近在使用 Python API 时遇到以下 BigQuery 错误:
google.api_core.exceptions.BadRequest: 400 configuration.query.destinationTable 无法为脚本设置
这是我使用的功能:
def execute_bigquery_sql(query, dataset_id, table_id, use_legacy_sql=True, write_disposition='WRITE_TRUNCATE'):
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = use_legacy_sql
print("table_id: table_id".format(table_id=table_id))
print("dataset_id: dataset_id".format(dataset_id=dataset_id))
if table_id:
table_ref = client.dataset(dataset_id).table(table_id)
print("table_ref: table_ref".format(table_ref=table_ref))
job_config.destination = table_ref
job_config.write_disposition = write_disposition
job_config.allow_large_results = True
job_config.createDisposition = "CREATE_IF_NEEDED"
query_job = client.query(query,job_config=job_config)
results = query_job.result() # Waits for job to complete.
有谁知道可能发生的情况和解决方法?
【问题讨论】:
【参考方案1】:感谢您的回复,cmets 确实是在正确的方向。在 BigQuery 脚本中意味着 https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting.
这是不允许的,我的查询有:
DECLARE capital int64 default 10000000;
因此,在我的情况下,删除上面的行是解决方法。
有趣的是,即使在网页界面中
如果您使用脚本,界面将不允许保存到表格: 相反,当不使用脚本语句时,您应该看到:【讨论】:
我的查询设置看起来像我无法使用脚本的第二个屏幕截图。如何更改查询设置以使用第一个屏幕截图中的脚本?【参考方案2】:错误是自描述的。脚本不允许设置目标表 - 您应该使用 DML/DDL
解决方法是重置没有目标表的job_config
【讨论】:
只是澄清一下,在这种情况下 script 是什么意思?这和这个官方doc有什么区别? cloud.google.com/bigquery/docs/reference/standard-sql/scripting 好的,所以问题依赖于 OP 问题中的实际 SQL,不是吗?如果该查询不包含任何脚本,那么它(至少在这方面)会起作用,对吧? 当一个运行脚本或 DML/DDL - 目的地是不允许的,将导致错误 我遇到了类似的问题,不太明白 OP 解释的解决方案:***.com/questions/65590829/…以上是关于无法使用 BigQuery Python API 设置目标表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 google-api-python-client 设置 BigQuery 配置属性?
使用 Python API 获取 BigQuery 临时表“目标表”