进行 jobs.insert 调用时处理 503 错误

问题描述 投票:0回答:1

在 Bigquery 的文档中,503 backendError 的故障排除部分指出:

如果您在调用 jobs.insert 时收到此错误,则不清楚作业是否成功。在这种情况下,您需要重试该作业。

来源:https://cloud.google.com/bigquery/docs/error-messages

我不明白的是,如果我们不确定原始作业是否成功,我们如何知道重试是否可以安全调用并且不会导致重复?

比如第一个作业最终完成了,但是重试也成功了,那不是会导致数据重复吗?

我找了好几天了,没有找到关于处理这种情况的明确信息。

google-cloud-platform error-handling google-bigquery google-api
1个回答
0
投票

一个好的做法是控制您启动的作业。我的意思是,您可以为作业生成唯一的 ID,然后您可以检查它们的状态以及如何处理它们。 python 中的实际示例: 我想从 csv 加载数据。我使用 hashlib 库创建一个唯一的 job_id

import hashlib
file_name = ‘data.csv’
job_id = hashlib.sha256(file_name.encode()).hexdigest()

接下来我要开始工作了

from google.cloud import bigquery

client = bigquery.Client()
job_config = bigquery.LoadJobConfig(...)
uri = ‘gs://your_bucket/data.csv’

job = client.load_table_from_uri(
    uri,
    ‘your_dataset.your_table’,
    job_config=job_config,
    job_id=job_id
)

如果我想检查它处于什么状态,我可以从 bq 控制台使用以下命令(https://cloud.google.com/bigquery/docs/reference/bq-cli-reference?hl=es-第419章#bq_show):

bq show --job <PROJECT_ID>:<JOB_ID>

通过此,我们将验证作业处于哪个状态,因此,如果您想再次运行它或等待它完成(无论是否有错误),这样您就不会得到您所说的口是心非。

希望这对您有用!

© www.soinside.com 2019 - 2024. All rights reserved.