2012-12-12 41 views
1

我有一些失敗的大型查詢作業,我試圖開發一種重試機制,在該機制中,我將保存數據存儲中失敗的所有作業,以及稍後重新嘗試運行它們。 所以,我有我自己的對象「JobFailed」,它有一些屬性,「Job」就是其中之一。 「作業」不能序列化,無法序列化或嵌入數據存儲實體(或至少我無法這樣做..)
那麼我的選擇是什麼? 必須讓我自己的對象保存在數據存儲中,並在其被拔出以構建作業對象時進行解析? 我可以將作業繼承到我自己的作品中,並在其上放置一個實體註釋並將其保存爲連接到我的JobFailed實體的獨立實體?那會工作嗎?如何在數據存儲中保存大型查詢作業對象

另一種可能性是隻保存dataStore中的JobId,並在需要時使用BigQuery Api中的「get」方法獲取作業。 (但我更喜歡將它保存到數據存儲..)

謝謝。

回答

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() 
+0

@Michael_Manoochehri的工作不執行向右走,要執行某些時候它甚至需要幾分鐘,所以我需要保存作業的ID以檢查狀態直到作業完成。而不是像你說的那樣構建「BigQueryJob」類,我想將實際的工作保存在數據存儲中,所以如果失敗了,我可以將其取出併發送回大查詢,以便再次嘗試......(某些它的字段不僅僅是像狀態這樣的字符串,它是一個嵌套的對象) – Vini