2017-06-22 45 views
0

在發佈之前,我在互聯網上瀏覽過類似帖子,但找不到匹配項。道歉,如果它已經回答,我錯過了職位。通過使用Python API的Bigquery更新聲明

我已經創建了一個python腳本,通過app引擎將數據從Google雲存儲加載到BigQuery。由於應用引擎具有60秒的超時時間窗口,因此希望以異步模式提交這些作業,並且希望將JOB ID存儲在其中一個bigquery表中。另一個腳本將保留作業的狀態,如果作業是「完成」,則將結果提交併更新該表中完成的作業狀態。這樣下次我不會爲同一份工作檢查工作狀態。

如果我取消選擇「使用舊版SQL」,但未使用API​​,update語句在Web控制檯上正常工作。我嘗試了不同的方式,例如在查詢前使用#standardSQL,但沒有運氣。

_qry = "update temp.temp set name1='xyz1' where name1='hjk'" 

    job_data = { 
     'jobReference': { 
      'projectId': cfg._projectid, 
      'job_id': str(uuid.uuid4()) 
     }, 
     'configuration': { 
      'query': { 
       'query': _qry, 
       'timeoutMs': 60000, 
       'useLegacySql': false 
       }, 
       'allowLargeResults': True, 
       'priority': 'BATCH' 
      } 
     } 
    _jbslist = _bq.jobs() 
    _jbq_response = _jbslist.insert(projectId=_projectid,body=job_data).execute() 

_jbslist = _bq.jobs() 
    _job = None 
    _job = 
_jbslist.get(projectId=_projectid,jobId=_jbq_response['jobReference']['jobId']).execute() 
+0

你有一些'traceback'消息嗎? –

+0

這是我收到的錯誤信息。 錯誤: 查詢:1.1 - 1.58:無法識別的令牌更新。 (錯誤代碼:invalidQuery) – user374374

+0

在你的JSON中你有''useLegacySql':false'。它是如何運行你的代碼? 'false'在Python中沒有定義,它應該是'False',但解釋器仍然應該拋出一個錯誤。要求確認。 –

回答

0

現在更新語句正在工作。需要在SQL之前添加standardSQL。

_qry1 = "#standardSQL" 
    _qry = _qry1 + "\n" + "UPDATE `tensile-site-168620.temp.temp` SET name1='chaitu1331' WHERE name1='chaitu11'" 

表的名稱應與``這些報價tensile-site-168620.temp.temp然後更新語句工作。謝謝你的幫助。