run_async_query 在 Python gcloud BigQuery 中使用标准 SQL 而不是旧版 SQL

run_async_query in Python gcloud BigQuery using Standard SQL instead of Legacy SQL

我需要 运行 使用 gcloud python BigQuery 库的异步查询。此外,我需要 运行 使用 beta standard sql instead of the default legacy sql.

According to the documentation here, here, and here 的查询我相信我应该能够将工作中的 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"}]

这与您在 BigQuery 控制台中使用旧版 SQL 运行 时遇到的错误相同。当我在 BigQuery 控制台中复制粘贴查询并使用标准 SQL 运行 时,它执行得很好。注意:错误位置 (2.20 - 2.64) 对于上面的查询可能不完全正确,因为它是一个样本,我在其中混淆了一些我的个人信息。

从 0.17.0 版本开始,use_legacy_sql property 不存在,因此您需要检查当前的 master 分支。然而,它现在确实存在于 0.18.0 版本中,因此在通过 pip 升级 gcloud-python 之后你应该可以开始了。