代码之家  ›  专栏  ›  技术社区  ›  augustin-barillec

在bigquery中重试更新似乎不起作用

  •  1
  • augustin-barillec  · 技术社区  · 7 年前

    当我运行以下代码时:

    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不支持同时更新),并且似乎从未重试。但是,我传递了一个“重试”对象,它捕获第二个查询作业的所有异常。我不明白为什么不重试第二个查询作业。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Tim Swast    7 年前

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

    在这种情况下,API“成功”(至少就HTTP错误代码而言),但响应机构表示作业失败。

        2
  •  3
  •   tomgorb    3 年前

    python中的变通方法:

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

    它将以指数回退的方式尝试您查询作业多达7次。