0

我需要使用gcloud python BigQuery庫運行異步查詢。此外,我需要運行測試使用測試版standard sql而不是默認legacy sql

根據文檔here,herehere我相信我應該能夠將屬性設置爲False。但是,由於查詢是針對舊版SQL處理的,因此仍然會導致錯誤。 如何成功使用此屬性來指示要使用哪個SQL標準處理查詢?下面Python中的run_async_query gcloud使用標準SQL而不是傳統SQL的BigQuery

例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)對於上面的查詢可能不完全正確,因爲它是一個樣本,我已經混淆了它中的一些個人信息。

+0

如果您創建了stdz_job,您爲什麼要檢查job.state/job.errors。這裏的工作對象是什麼? –

+0

良好的眼睛Mosha,我調整了我的代碼來製作這個樣本 - 在原始中,我循環執行了多個stdz作業實例,將它們保存在一個列表中,然後再次循環遍歷它們以檢查狀態。我編輯了代碼以反映此示例中的單個作業場景。 – KevinTydlacka

+0

您的其他屬性(例如destination,allow_large_results)是否也可以通過此方法正確設置?我通過客戶端代碼偷看,這似乎應該只是工作。看起來'useLegacySql'參數的支持[在一週前添加](https://github.com/GoogleCloudPlatform/gcloud-python/commit/21ae0c97566c9e5e8f485cb7536fcd6e7efc44f3):你有最新版本的客戶端? –

回答

1

use_legacy_sql property在版本0.17.0中不存在,因此您需要查看當前主分支。但是現在它的版本號爲0.18.0,所以在通過pip升級gcloud-python之後,你應該很好。

相關問題