在bigquery中重试更新似乎不正确

2024-04-27 04:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行以下代码时:

bq_client = google.cloud.bigquery.Client(project='project')
query1 = """
UPDATE dataset.table SET col = 1 where id = 'a' 
"""
query2 = """
UPDATE dataset.table SET col = 2 where id = 'b' 
"""
p = google.api_core.retry.if_exception_type(Exception)
r = google.api_core.retry.Retry(predicate=p)
bq_client.query(query1)
bq_client.query(query2, retry=r)

第一个查询作业成功,但第二个查询作业失败(因为bigquery不支持同时更新),而且似乎永远不会重试。但是,我传递了一个“Retry”对象,该对象捕获第二个查询作业的所有异常。我不明白为什么不重试第二个查询作业。在


Tags: projectclientidgoogle作业tableupdatecol
2条回答

我认为原因是retry选项会重试API调用以插入作业,但实际上它不会为您重试作业。

在这种情况下,API“成功”(至少就HTTP错误代码而言),但是响应主体说作业失败了。

python中的解决方法:

max_tries = 7
def myJob():
   for n in range(max_tries):
       try:
           myQueryJob()
       except Exception:
           if n == max_tries - 1:
               raise Exception
           time.sleep(2**n)

它将尝试你的查询作业多达7次与一种指数退避。

相关问题 更多 >