2017-06-22 19 views
0

これを投稿する前に、私はインターネット上の同様の投稿を行っていますが、一致するものは見つかりませんでした。既に答えられていて、私がポストを見逃していたなら、お詫びします。Python APIを使用したBigqueryの更新文

Google Cloud StorageからBigQueryへのデータをアプリエンジン経由で読み込むPythonスクリプトを作成しました。アプリケーションエンジンには60秒のタイムアウト時間があるため、これらのジョブを非同期モードで送信し、JOB IDをbigqueryテーブルの1つに保存したいとします。別のスクリプトはジョブのステータスを保持し、ジョブが「完了」であれば結果をプルし、そのテーブルで完了したジョブ状態を更新します。次回は同じジョブのジョブステータスをチェックしません。

「従来のSQLを使用する」を選択解除してもAPIを使用しないと、更新ステートメントがウェブコンソールからうまく機能しています。私はクエリの前に#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その文が動作しているアップデート ``内でなければなりません。ご協力いただきありがとうございます。

関連する問題