BiqQuery 在 Apache Beam 中插入重试策略

Apache Beam API 具有以下 BiqQuery 插入重试策略。

  • 如果我指定retryTransientErrors数据流作业的行为如何?

  • shouldRetry提供来自 BigQuery 的错误,我可以决定是否应该重试。在哪里可以找到 BigQuery 的预期错误?

BiqQuery 插入重试策略

  • alwaysRetry - 始终重试所有失败。

  • neverRetry - 从不重试任何失败。

  • retryTransientErrors - 重试所有失败,已知的持续性错误除外。

  • shouldRetry - 如果应该重试此失败,则返回 true。

背景

  • 当我的 Cloud Dataflow 作业将非常旧的时间戳(从现在开始超过 1 年)插入 BigQuery 时,出现以下错误。

 jsonPayload: {

  exception:  "java.lang.RuntimeException: java.io.IOException: Insert failed:

 [{"errors":[{"debugInfo":"","location":"","message":"Value 690000000 for field

 timestamp_scanned of the destination table fr-prd-datalake:rfid_raw.store_epc_transactions_cr_uqjp is outside the allowed bounds.

You can only stream to date range within 365 days in the past and 183 days in

the future relative to the current date.","reason":"invalid"}],

在第一个错误之后,Dataflow 尝试重试插入,但它总是因相同的错误而被 BigQuery 拒绝。

它没有停止,所以我将retryTransientErrors添加到 BigQueryIO.Write 步骤,然后重试停止了。


阿波罗的战车
浏览 151回答 1
1回答

holdtom

如果我指定 retryTransientErrors,数据流作业的行为如何?所有错误都被视为暂时性错误,除非 BigQuery 表示错误原因是“无效”、“无效查询”、“未实施”之一shouldRetry 提供来自 BigQuery 的错误,我可以决定是否应该重试。在哪里可以找到 BigQuery 的预期错误?你不能,因为调用者看不到错误。我不确定这是否是故意的,或者 Apache Beam 是否应该公开错误以便用户可以编写自己的重试逻辑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java