こんにちは!CData Software エンジニアの宮本です。
今回はよくお問合せいただくこの BigQuery のエラーについて触れていきます。
Request payload size exceeds the limit: 10485760
Request payload size exceeds the limit: 10485760
冒頭に載せたエラーメッセージですが、これは BigQuery に大量データをリクエストしたときに発生する可能性があるエラーになります。
どうやら 1 回の HTTP リクエストサイズの上限が 10 MB のようで、それを超えた場合に発生するそうです。
https://cloud.google.com/bigquery/quotas#all_api_requests
注釈にあるようにGoogle での独自のサイズ上限が適用されるため、エラー回避のためには 5 MB 以下でリクエストが望ましいようですね。
コードで HTTP リクエストを行っているなら自前で制御できますが、ETL/ELT ツールなどを利用している場合は、ツールでリクエストサイズの制御用オプションがないと対応できなさそうではあります。
ではCData の ELT ツール、CData Sync においてはどう対応するのかみていきましょう。
CData Sync によるリクエストサイズの設定
CData Sync ではリクエストサイズを事前に設定するオプションが備わっています。
https://cdn.cdata.com/help/ASF/jp/sync/Advanced-Job-Options.html
このバッチサイズというオプションに1回のリクエストで送信するレコード件数を設定することで、「Request payload size exceeds the limit: 10485760」のエラーを回避します。
では実際に CData Sync を使って試してみましょう。
CData Sync のジョブ画面から Advanced タブを表示します。ここではジョブに対するオプションを設定することができ、この赤枠部分に1回のリクエストで送信するレコード件数を設定します。
今回はわかりやすく100件で設定してみました。
実行自体は正常に終了しましたので、
ログをみて1リクエスト時の件数を確認してみたいと思います。
実際に BigQuery に連携するデータを送信するリクエストを行っているのはこの insertAll メソッドのところになり、CData Sync で設定したバッチサイズ 100 が影響するのは赤枠の部分になります。
この赤枠部分だけを抽出しカラム名で検索すると、100件とカウントされたので合ってますね。
このようにバッチサイズで調整して対応できますので、
「Request payload size exceeds the limit: 10485760」が発生したときは設定してみてください。