BigQuery 在 Apache Beam 中插入重试策略
BiqQuery insert retry policy in Apache Beam
Apache Beam API 具有以下 BiqQuery 插入重试策略。
- 如果我指定 retryTransientErrors?
,Dataflow 作业将如何运行
- shouldRetry 提供了来自 BigQuery 的错误,我可以决定是否应该重试。在哪里可以找到 BigQuery 的预期错误?
BiqQuery 插入重试策略
- alwaysRetry - 始终重试所有失败。
- neverRetry - 从不重试任何失败。
- retryTransientErrors - 重试除已知持续性错误之外的所有失败。
- shouldRetry - Return 如果应该重试此失败,则为 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 步骤,然后重试停止了。
How Dataflow job behave if I specify retryTransientErrors?
所有错误都被视为暂时性错误,除非 BigQuery 指出错误原因是 "invalid", "invalidQuery", "notImplemented"
shouldRetry provides an error from BigQuery and I can decide if I should retry. Where can I find expected error from BigQuery?
你不能,因为错误是 not visible 给调用者的。我不确定这是否是故意的,或者 Apache Beam 是否应该公开错误以便用户可以编写自己的重试逻辑。
Apache Beam API 具有以下 BiqQuery 插入重试策略。
- 如果我指定 retryTransientErrors? ,Dataflow 作业将如何运行
- shouldRetry 提供了来自 BigQuery 的错误,我可以决定是否应该重试。在哪里可以找到 BigQuery 的预期错误?
BiqQuery 插入重试策略
- alwaysRetry - 始终重试所有失败。
- neverRetry - 从不重试任何失败。
- retryTransientErrors - 重试除已知持续性错误之外的所有失败。
- shouldRetry - Return 如果应该重试此失败,则为 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 步骤,然后重试停止了。
How Dataflow job behave if I specify retryTransientErrors?
所有错误都被视为暂时性错误,除非 BigQuery 指出错误原因是 "invalid", "invalidQuery", "notImplemented"
shouldRetry provides an error from BigQuery and I can decide if I should retry. Where can I find expected error from BigQuery?
你不能,因为错误是 not visible 给调用者的。我不确定这是否是故意的,或者 Apache Beam 是否应该公开错误以便用户可以编写自己的重试逻辑。