2017-10-08 51 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操作。这应该可以帮助你通过限速。

基本上就是将批处理逻辑添加到脚本中。