【发布时间】:2019-03-14 15:41:11
【问题描述】:
我正在尝试使用批量更新语句更新表。 DML 查询在 BigQuery Web UI 中成功执行,但在批处理时,第一个查询成功,而其他查询失败。这是为什么呢?
示例查询:
query = '''
update `project.dataset.Table`
set my_fk = 1234
where other_fk = 222 and
received >= PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%S", "2018-01-22 05:28:12") and
received <= PARSE_TIMESTAMP("%Y-%m-%d %H:%M:%S", "2018-01-26 02:31:51")
'''
示例代码:
job_config = bigquery.QueryJobConfig()
job_config.priority = bigquery.QueryPriority.BATCH
queries = [] # list of DML Strings
jobs = []
for query in queries:
job = client.query(query, location='US', job_config=job_config)
jobs.append(job)
工作输出:
for job in jobs[1:]:
print(job.state)
# Done
print(job.error_result)
# {'message': 'Cannot set destination table in jobs with DML statements',
# 'reason': 'invalidQuery'}
print(job.use_legacy_sql)
# False
print(job.job_type)
# Query
【问题讨论】:
-
您是否对所有批处理作业重复使用相同的
job_config? -
我是。我不应该吗?
-
BigQuery API 将填充一些字段,因此,在第一个作业的响应之后,目标表将是非空的。然后,第二个将失败。您可以在第一次通话前后与
print(job_config.destination)进行验证
标签: google-bigquery