如何在数据存储中保存大型查询作业对象

时间:2012-12-12 09:18:07

标签: google-cloud-datastore google-bigquery

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

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

感谢。

1 个答案:

答案 0 :(得分: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()