CData Software Blog

クラウド連携のCData Software の技術ブログです。

BigQueryへのリクエストでエラー:Request payload size exceeds the limit: 10485760

こんにちは!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

f:id:sennanvolar44:20210108144353p:plain

注釈にあるように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

f:id:sennanvolar44:20210108151928p:plain

このバッチサイズというオプションに1回のリクエストで送信するレコード件数を設定することで、「Request payload size exceeds the limit: 10485760」のエラーを回避します。


では実際に CData Sync を使って試してみましょう。
CData Sync のジョブ画面から Advanced タブを表示します。ここではジョブに対するオプションを設定することができ、この赤枠部分に1回のリクエストで送信するレコード件数を設定します。
今回はわかりやすく100件で設定してみました。
f:id:sennanvolar44:20210108163255p:plain

実行自体は正常に終了しましたので、 f:id:sennanvolar44:20210108164620p:plain
ログをみて1リクエスト時の件数を確認してみたいと思います。

f:id:sennanvolar44:20210108164855p:plain

実際に BigQuery に連携するデータを送信するリクエストを行っているのはこの insertAll メソッドのところになり、CData Sync で設定したバッチサイズ 100 が影響するのは赤枠の部分になります。
f:id:sennanvolar44:20210108175115p:plain

この赤枠部分だけを抽出しカラム名で検索すると、100件とカウントされたので合ってますね。
f:id:sennanvolar44:20210108175828p:plain

このようにバッチサイズで調整して対応できますので、
f:id:sennanvolar44:20210108181319p:plain

「Request payload size exceeds the limit: 10485760」が発生したときは設定してみてください。