BigQueryで「Cannot query rows larger than 100MB limit.」が出た



えー、いまだになかなか慣れないBQ。
適当にSQL作って小さい期間で実行したらうまく言ったのに、範囲を1年くらいに広げたら

Cannot query rows larger than 100MB limit.

っていうエラーが出ました。
容量でかすぎ? と思ったけど、1年の範囲でこけるんだったらBQのメリットとは、とか思っていたんですが、これ単純にSQLが悪かったのが原因でした。

with句でoracleの時の癖で必要なテーブルを整形し、それを最後にぶつけていたんですが、でかいテーブル2つをwith句で整形し、それを最後にぶつける時にgroup by していたのが原因でした。
with句の結果は最終的にシンプルになるようにしたことで問題を解消。

rawデータのようにでかいデータを扱えるのが魅力のBQですが、rawデータのでかいのを2つ意味もなくraw状態でぶつけてから集計しようとすると、途中のwith句で一旦確保するメモリがでか過ぎてコケるらしい。

oracleの癖だと結局捜索範囲は一緒だから大丈夫だろう、って思っていたけど、確かに一旦メモリ喰っちゃう仕組みになるとそうなのかも。