2017-10-08 87 views
0

通過這樣做,因爲它是我得到的錯誤Exceeded rate limits: too many table update operations for this table. 我知道,我有表更新限制:查詢多個表到一個

Maximum rate of table update operations: 1 operation every 2 seconds (insert, patch, update, jobs output).

但我的問題是我應該如何處理呢?在循環中插入作業之後添加一些延遲?

我必須從500個聯邦表(谷歌驅動器表)更新目標表,我不能一次使用wilcards或多個選擇,因爲當其中一個用戶鍵入字符串到整數字段整個查詢將失敗獲取失敗解析錯誤。

所以我決定環路它在Python(再創建cron作業)通過將插入工作爲每個表

你知道它的任何更多effectient方法?

EDIT1代碼添加

def insert(query, tableid, disposition): 
job_body = { 
"configuration": { 
    "query": { 
    "query": query, 
    "useLegacySql": True, 
    "destinationTable": { 
    "datasetId": "dataset", 
    "projectId": "myproject", 
    "tableId": tableid 
    }, 
    "writeDisposition": disposition 
    } 
} 
} 

query_request.insert(
    projectId=PROJECT_NUMBER, 
    body=job_body).execute() 

class MainPage(webapp2.RequestHandler): 
def get(self): 
    query = "SELECT * FROM [%s]" 
    for table in table_list(): 
     if int(table['id'][-4:]) <= 600: 
      insert(query % table['id'], 'users_data_p1', "WRITE_APPEND") 
     else: 
      insert(query % table['id'], 'users_data_p2', "WRITE_APPEND") 


app = webapp2.WSGIApplication([ 
('/', MainPage), 
], debug=True) 
+0

*通過這樣做...我決定循環它在python * - 這將有助於看到它**(即代碼)。 – Parfait

回答

0

而是有許多不同的SELECT *查詢,每個嘗試添加到兩個目標表users_data_p1的一個或users_data_p2,我想你可以嘗試構建一個查詢是所有源表格的UNION ALL,然後對users_data_p1執行一個WRITE_APPEND操作,然後對users_data_p1執行另一個WRITE_APPEND操作。這應該可以幫助你通過限速。

基本上就是將批處理邏輯添加到腳本中。