1

我有一些失败的大型查询作业,我正在尝试开发一种重试机制,在该机制中我将保存数据存储中所有失败的作业,然后重新尝试运行它们。所以,我有自己的对象“JobFailed”,它有一些属性,“Job”就是其中之一。“工作”不能序列化,不能序列化或嵌入到数据存储实体中(或者至少我不能这样做..)
所以我有什么选择?我必须制作自己的对象以保存在数据存储中并在将其拉出以构建作业对象时对其进行解析吗?我可以将工作继承到自己的工作中并在其上放置实体注释并将其保存为连接到我的 JobFailed 实体的独立实体吗?那行得通吗?

另一种可能性是仅在 dataStore 中保存 JobId 并在我需要时使用 BigQuery Api 中的“get”方法获取作业。(但我更喜欢将其保存到数据存储区..)

谢谢。

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 ''

然后将此信息存储在 Datastore 模型中,例如:

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