1

失敗した大きなクエリジョブがいくつかあります。データストアで失敗したすべてのジョブを保存し、後でそれらの実行を再試行する再試行メカニズムを開発しようとしています。だから、私は自分のオブジェクト「JobFailed」を持っています。これには、「Job」がその1つであるといういくつかのプロパティがあります。「ジョブ」はシリアル化できず、シリアル化することも、データストアエンティティに埋め込むこともできません(または少なくとも私はそうすることができませんでした..)。
それで、私のオプションは何ですか?データストアに保存する独自のオブジェクトを作成し、それを引き出してジョブオブジェクトを構築するときに解析する必要がありますか?ジョブを自分のものに継承し、それにエンティティアノテーションを付けて、JobFailedエンティティに接続されているスタンドアロンエンティティとして保存できますか?それはうまくいくでしょうか?

もう1つの可能性は、BigQuery Apiの「get」メソッドを使用して、JobIdのみをdataStoreに保存し、必要なときにジョブを取得することです。(しかし、私はそれをデータストアに保存することを好みます。)

ありがとう。

4

1 に答える 1

0

質問を誤解しているかもしれませんが、API応答からステータスとエラーメッセージを引き出すだけではいけませんか?

project_number = 'XXXXXXXX'
job_id = 'job_600b919ee97a4eXXXXXXXX'

bigquery_service = build('bigquery', 'v2', http=http)
jobs = bigquery_service.jobs()

job = jobs.get(projectId=project_number,
               jobId=job_id).execute()

# Result
job_state = job['state']
job_error = job['errorResult']['reason'] if job.get('errorResult') else ''

次に、この情報を次のようなデータストアモデルに保存します。

class BigQueryJob(db.Model):
  job_id = db.StringProperty(required=True)
  status = db.StringProperty(required=True)
  error = db.StringProperty()
于 2012-12-18T08:05:43.857 に答える