使用标准SQL而不是传统SQL的Python gcloud BigQuery中的run_async_query



我需要使用gcloud-python BigQuery库运行异步查询。此外,我需要使用测试版标准sql而不是默认的遗留sql来运行查询

根据这里、这里和这里的文档,我相信我应该能够将作业的use_legacy_sql属性设置为False。但是,这仍然会导致一个错误,因为查询是针对旧版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"}]

如果使用LegacySQL在BigQuery控制台中运行它,也会出现同样的错误。当我在BigQuery控制台中复制粘贴查询并使用标准SQL运行它时,它执行得很好。注意:错误位置(2.20-2.64)可能不完全适用于上面的查询,因为它是一个样本,我混淆了其中的一些个人信息。

use_legacy_sql属性在0.17.0版本之前不存在,因此您需要签出当前主分支。然而,它现在的版本是0.18.0,所以在通过pip升级gcloud-python之后,你应该可以开始了。

相关内容

  • 没有找到相关文章

最新更新