BigQueryでクエリ結果が大きすぎて実行できない時、クエリを分割したり、カラム数を減らしたり、WHERE句でフィルタリングして減らす、というのは誰もが思いつくと思いますが、どうしても一発で確認したい時もあります。
意外と知られていないかもしれないので、今回はクエリ結果が大きい場合でも一発で実行&結果を確認する方法についてご紹介したいと思います。
BigQueryでクエリ結果が大きすぎて実行時エラー
BigQuery でクエリ結果が大きすぎるときのエラーは以下の通りです。
Response too large to return. Consider specifying a destination table in your job configuration. For more details, see https://cloud.google.com/bigquery/troubleshooting-errors
こんな感じでいつものように実行していると思いきや、、
しばらくすると、以下のようなエラーになります。
ちなみに私は、BigQuery で結果が大きすぎるエラーを見たのは今回が初めてでした。
https://cloud.google.com/bigquery/docs/writing-results?hl=ja#large-results
解決策:大きな結果を許可する
<bq コマンドライン ツールを使用する場合>
<ブラウザツールを使用する場合>
まずは、クエリエディタのメニューバーにある「展開」から「クエリ設定」を開きます。
次に、送信先として任意のテーブル(新規作成も可)を指定します。
※一時テーブルでは大容量の結果はNGです
・「クエリ結果の宛先テーブルを設定する」を選択
・送信先として任意のテーブル(新規作成も可)を指定します。
・結果サイズの「大容量の結果を許可する(サイズ上限なし)」にチェックをいれる
・「保存」します
保存すると、クエリエディタの下部に宛先テーブルと、「大容量の結果の許可」というタグがつきます。この状態でクエリを実行すると、どれだけ大きな結果でも返ってきます。結果は、指定した宛先テーブルに保存されているため、ブラウザを閉じてもいつでも確認できます。
今回の例では、クエリ結果は8億件ありました。
どこで時間がかかっているのか、何件処理されているのか、というのも実行グラフで確認できます。複数のテーブルを結合するような複雑なクエリの場合は、こちらを確認するのもいいかもしれません。
その他の解決策
なお、他にも一般的な対処法としては、以下のようなものがありますのでご参考までに。
①クエリを最適化する
クエリのパフォーマンスを最適化することで、処理時間を短縮することができます。例えば、必要なカラムだけを選択したり、余分なJOINを減らしたり、WHERE条件を使ってフィルタリングしたりすることが考えられます。
②クエリを分割する
クエリを複数のクエリに分割して実行することで、処理時間を短縮することができます。例えば、テーブルを日付ごとに分割することで、1つのクエリが処理するデータ量を減らすことができます。
③BigQueryをストレージAPIとして使用する
BigQueryはストレージAPIとしても使用できます。この場合、クエリを実行する代わりに、ストレージAPIを使用してデータを取得することができます。
④BigQueryのリソースを拡張する
BigQueryのリソースを拡張することで、クエリの実行時間を短縮することができます。例えば、BigQueryのリソースを増やしたり、分散処理のためのパーティションを設定したりすることが考えられます。
まとめ
- BigQuery の「大容量の結果を許可」オプションを使用すれば、サイズ上限なくクエリ結果を取得できる
- 一時テーブルでは「大容量の結果を許可」オプションは利用不可
- 他にも、クエリ最適化や分割などの解決策がある
API ARIMA AutoML Bard BigQuery Bing ChatGPT Cloud Endpoints Cloud Storage DWH EBPM GAS Generative AI Google Apps Script Google Cloud Google Form Google Workspace IT組織 Outlook PaLM PDF Python ReportLab selenium Statsmodels STL VertexAI Vertex Forecast スクラッチ セミナー ソトミル トレンド分析 トレーニング バッチ予測 世界は女性とデジタルが救う 女性活躍 技術 時系列データ分析 業務効率化 機械学習 特徴量エンジニアリング 生成AI 自動化 評価指標 需要予測