我需要使用 gcloud python BigQuery 库运行异步查询。此外,我需要使用 beta标准 sql而不是默认的legacy sql运行查询。
根据此处、此处和此处的文档,我相信我应该能够将use_legacy_sql
作业上的属性设置为False
. 但是,由于针对 Legacy SQL 处理查询,这仍然会导致错误。 如何成功使用此属性来指示我希望使用哪个 SQL 标准来处理查询?
下面的示例 Python 代码:
stdz_table = stdz_dataset.table('standardized_table1')
job_name = 'asyncjob-test'
query = """
SELECT TIMESTAMP('2016-03-30 10:32:15', 'America/Chicago') AS special_date
FROM my_dataset.my_table_20160331;
"""
stdz_job = bq_client.run_async_query(job_name,query)
stdz_job.use_legacy_sql = False
stdz_job.allow_large_results = True
stdz_job.create_disposition = 'CREATE_IF_NEEDED'
stdz_job.destination = stdz_table
stdz_job.write_disposition = 'WRITE_TRUNCATE'
stdz_job.begin()
# wait for job to finish
while True:
stdz_job.reload()
if stdz_job.state == 'DONE':
# print use_legacy_sql value, and any errors (will be None if job executed successfully)
print stdz_job.use_legacy_sql
print json.dumps(stdz_job.errors)
break
time.sleep(1)
这输出:
False
[{"reason": "invalidQuery", "message": "2.20 - 2.64: Bad number of arguments. Expected 1 arguments.", "location": "query"}]
如果您使用旧版 SQL 在 BigQuery 控制台中运行它,则会遇到相同的错误。当我在 BigQuery 控制台中复制粘贴查询并使用标准 SQL 运行它时,它执行得很好。注意:错误位置 (2.20 - 2.64) 对于上面的查询可能不完全正确,因为它是一个示例,我在其中混淆了我的一些个人信息。