BigQueryでGROUP BY ALLがプレビューになりました
Google Cloudデータエンジニアのはんざわです
2024年2月26日にGROUP BY
に関連して大きく2つのアップデートがありました。
BigQuery release notes: February 27, 2024
1つ目は、以前に紹介したGROUP BY GROUPING SETS
などの3つの関数が正式にGAになりました。
2つ目は、今回紹介するGROUP BY ALL
が新たにプレビューとして追加されました。
本ブログでは、新しく追加されたGROUP BY ALL
を実際に触ってみたいと思います!
そもそも GROUP BY ALL とは
簡単に説明するとSELECT句から集計関数などを除く全てのカラムでグループ化してくれる機能になります。
今までは、GROUP BY col1, col2, ...
や GROUP BY 1, 2, ...
のような形で個別に指定する必要がありましたが、GROUP BY ALL
が追加されてことで個別に指定する手間が省けるようになりました!
公式ドキュメント: Group rows by ALL
従来との比較
個別に指定する方法
SELECT word, COUNT(*) AS cnt FROM samples_dataset.shakespeare GROUP BY word ORDER BY cnt DESC
個別に指定する方法では、仮にSELECT句で指定するカラムを増やした場合、グループ化するカラムも同様に増やす必要がありました。
仮に増やさなかった場合、以下のようなエラーが発生し、集計クエリが実行できなくなってしまいます。
SELECT list expression references column <カラム名> which is neither grouped nor aggregated
GROUP BY ALLを使った方法
SELECT word, COUNT(*) AS cnt FROM samples_dataset.shakespeare GROUP BY ALL ORDER BY cnt DESC
一方で、GROUP BY ALLを使った方法では、SELECT句で指定するカラムをいくら増やしても何もせずに正常に実行することが可能です。
もちろん、それぞれの方法で取得した集計結果は同じになります。
まとめ
この記事では、GROUP BY ALL
を簡単に紹介しました。
今回の例のようにグループ化したいカラムが少ない場合は恩恵を感じにくいかもしれません。
一方でグループ化したいカラムが多いケースやSELECT句で指定するカラムを動的に変更させたいケースでは非常に有効な機能だと思います。
是非、そのようなケースに直面した際には利用を検討してみてください!