日々地道に成長

思いついたことを書いていきます。

【BigQuery】An internal error occurred and the request could not be completed」エラーについて&digdagのretry機能

お疲れ様です。コーヒーです。

 

今回はBigQueryの「An internal error occurred and the request could not be completed」エラーについてと、その対処法についてです。

エラーの状況について

  • digdag+embulkでbqのクエリを実行時発生
  • 発生タイミングは不定
  • 再実行時にはエラーが出ない

上記のような状況でエラーが起こっていました。

 

こちらのエラーについて調査したところ以下のような状況でした。

  • BQの内部エラーで起こる
  • 原因は現状不明
  • 再実行で解決可能

ただ毎回再実行しなくてはいけないのでは、定期的に動かすクエリとしては問題があります。

digdagの_retryオプション

今回はこの問題をdigdagのretryオプションで解決しました。

公式の文は以下になります。

docs.digdag.io

使用方法は簡単で、エラーが起きてしまった時にやり直ししてほしいタスクに[_retry]を設定するだけです。

+bq:
  _retry: 3

  +step1:
    sh>: bq query --use_legacy_sql=false < xxx.sq

上記はエラー時に3回までリトライするものになります。

 

ただこれだけだと、連続でクエリをやりなすのでエラーが連続で起きてしまう可能性があるため、以下のようにクエリをリトライするまでのインターバルを設定することで動作を安定させられます。

+bq:
  _retry:
    limit: 3
    interval: 60
    interval_type: exponential

  +step1:
    sh>: bq query --use_legacy_sql=false < xxx.sql

こちらはstep1タスクがエラー時に60秒間をあけて再実行するものになります。

[interval_type]をexponentialに設定すると、再実行までの間隔を失敗するごとに増やしてくれるものになります。

 

以上でbqのエラーをdigdagのオプションで解決する手段でした。

最後まで読んでいただきありがとうございました。