【问题标题】:Google Cloud Bigquery Library ErrorGoogle Cloud Bigquery 库错误
【发布时间】:2018-06-28 18:54:04
【问题描述】:

我收到此错误 Cannot set destination table in jobs with DDL statements

当我尝试从 google.cloud.bigquery 库中的 job.build_resource() 函数重新提交作业时。

似乎在该函数调用之后目标表设置为类似这样。

'destinationTable': {'projectId': 'xxx', 'datasetId': 'xxx', 'tableId': 'xxx'},

我在这里做错了吗?感谢任何可以在这里给我任何指导的人。

编辑:

作业最初是由此触发的

query = bq.query(sql_rendered)

我们存储作业 ID 并在以后使用它来检查状态。

我们得到这样的工作

job = bq.get_job(job_id=job_id)

如果它满足一个条件,在这种情况下它由于速率限制而失败。我们重试该作业。

我们像这样重试工作

di = job._build_resource()
jo = bigquery.Client(project=self.project_client).job_from_resource(di)
jo._begin()

我认为这几乎是您需要的所有代码,但如果需要,我们很乐意提供更多。

【问题讨论】:

  • 请分享更多您正在使用的代码。仅从错误消息中无法判断导致设置目标表的原因。
  • 您是否有理由不重新提交原始作业?提交bq.get_job 返回的那个有点奇怪,因为它包含不相关的属性,如查询统计信息等(在本例中是目标表)。
  • 原因是我们使用的是Airflow。所以它是通过 xcoms 传递的,所以我们存储了 job_id,抓取它然后使用它。我们应该改变那个工作流程吗?
  • (简单的)替代方法是剥离您返回相关字段的工作资源,但更好的长期解决方案可能是传播您想要的原始工作或查询跑步。不过,鉴于您当前的设置,很难说哪个更合理。

标签: python-3.x google-bigquery google-cloud-python


【解决方案1】:

您看到此错误是因为您的查询中有 DDL 语句。正在发生的事情是 job_config 在执行第一个查询后更改了一些值,尤其是 job_config.destination 。为了尝试克服这个问题,您可以尝试在每次提交作业后将 job_config.destination 的值重置为 None,或者为每个查询使用不同的 job_config

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 2019-01-07
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多