在 Bigquery 的文档中,503 backendError 的故障排除部分指出:
如果您在调用 jobs.insert 时收到此错误,则不清楚作业是否成功。在这种情况下,您需要重试该作业。
来源:https://cloud.google.com/bigquery/docs/error-messages
我不明白的是,如果我们不确定原始作业是否成功,我们如何知道重试是否可以安全调用并且不会导致重复?
比如第一个作业最终完成了,但是重试也成功了,那不是会导致数据重复吗?
我找了好几天了,没有找到关于处理这种情况的明确信息。
一个好的做法是控制您启动的作业。我的意思是,您可以为作业生成唯一的 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>
通过此,我们将验证作业处于哪个状态,因此,如果您想再次运行它或等待它完成(无论是否有错误),这样您就不会得到您所说的口是心非。
希望这对您有用!