通过这样做,我收到错误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个联合表(google驱动器表)更新目标表,我不能一次使用wilcards或多个select,因为当一个用户键入字符串到整数字段时,整个查询将因失败解析错误而失败。
所以我决定在python中循环它(然后通过为每个表添加插入作业来创建cron作业)
你知道更有效的方法吗?
已添加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 :(得分:0)
我们认为你可以尝试构建一个SELECT *
的查询,而不是有多个单独的users_data_p1
个查询,而每个查询都会尝试附加到两个目标表users_data_p2
或UNION ALL
之一。在所有源表中{1}},然后为WRITE_APPEND
执行一次users_data_p1
操作,然后为WRITE_APPEND
执行另一个users_data_p1
操作。这应该可以帮助您完成速率限制。
基本上就是将批处理逻辑添加到脚本中。