DuckDBのSUMMARIZE関数が便利
2025-04-17
#はじめに
最近、DuckDBを使ったデータパイプラインとBIツールの開発をしており、DuckDBのSUMMARIZE関数が便利だと思ったので紹介したいと思います。
#SUMMARIZE関数とは
The SUMMARIZE command can be used to easily compute a number of aggregates over a table or a query. The SUMMARIZE command launches a query that computes a number of aggregates over all columns (min, max, approx_unique, avg, std, q25, q50, q75, count), and return these along the column name, column type, and the percentage of NULL values in the column.
出典:https://duckdb.org/docs/stable/guides/meta/summarize.html
SUMMARIZE関数は、テーブルやクエリに対して簡単に集計を計算するために使用できます。SUMMARIZE関数は、すべての列(min、max、approx_unique、avg、std、q25、q50、q75、count)に対して集計を計算するクエリを起動し、列名、列の型、および列のNULL値の割合とともに返します。
この関数は、データの概要を把握するのに非常に便利です。特に、データの前処理や分析を行う際に、各列の統計情報を迅速に取得できるため、データの理解を深めるのに役立ちます。
Pandasのdescribeメソッドに似ています。
#使い方
DuckDBのコンソールで以下のように実行します。例は、dbt_dev
というスキーマのwebsite_event
というテーブルに対してSUMMARIZE関数を実行しています。
D SUMMARIZE dbt_dev.website_event;
┌─────────────────┬──────────────────────┬──────────────────────┬─────────────────────────────────┬───────────────┬─────────┬─────────┬───────────────────────────────┬────────────────────────────┬───────────────────────────────┬───────┬─────────────────┐
│ column_name │ column_type │ min │ max │ approx_unique │ avg │ std │ q25 │ q50 │ q75 │ count │ null_percentage │
│ varchar │ varchar │ varchar │ varchar │ int64 │ varchar │ varchar │ varchar │ varchar │ varchar │ int64 │ decimal(9,2) │
├─────────────────┼──────────────────────┼──────────────────────┼─────────────────────────────────┼───────────────┼─────────┼─────────┼───────────────────────────────┼────────────────────────────┼───────────────────────────────┼───────┼─────────────────┤
│ event_id │ UUID │ 0068b43e-470a-4dcb… │ ffffdd94-89a3-463a-8cff-5a718… │ 326 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ website_id │ UUID │ 133d11de-3f81-4c3c… │ 133d11de-3f81-4c3c-91c2-69a3f… │ 1 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ session_id │ UUID │ 1b2f7fc5-ef60-5f2d… │ f49a79bd-834f-5b8a-884e-5402b… │ 15 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ created_at │ TIMESTAMP WITH TIM… │ 2025-03-31 11:01:2… │ 2025-04-10 11:53:08.477+09 │ 322 │ NULL │ NULL │ 2025-04-04 10:29:55.927125+09 │ 2025-04-09 09:50:13.599+09 │ 2025-04-09 10:06:18.325438+09 │ 316 │ 0.00 │
│ url_path │ VARCHAR │ / │ /works │ 20 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ url_query │ VARCHAR │ │ │ 1 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ referrer_path │ VARCHAR │ / │ /works │ 17 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 48.73 │
│ referrer_query │ VARCHAR │ │ │ 1 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 48.73 │
│ referrer_domain │ VARCHAR │ NULL │ NULL │ 0 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 100.00 │
│ page_title │ VARCHAR │ Datastreamを使って… │ 自宅のインターネット速度が遅… │ 7 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 44.94 │
│ event_type │ INTEGER │ 1 │ 1 │ 1 │ 1.0 │ 0.0 │ 1 │ 1 │ 1 │ 316 │ 0.00 │
│ event_name │ VARCHAR │ NULL │ NULL │ 0 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 100.00 │
│ visit_id │ UUID │ 02d24330-3d38-5b98… │ e18b2824-3ba7-5ed4-8eb7-94bfb… │ 33 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 0.00 │
│ tag │ VARCHAR │ NULL │ NULL │ 0 │ NULL │ NULL │ NULL │ NULL │ NULL │ 316 │ 100.00 │
├─────────────────┴──────────────────────┴──────────────────────┴─────────────────────────────────┴───────────────┴─────────┴─────────┴───────────────────────────────┴────────────────────────────┴───────────────────────────────┴───────┴─────────────────┤
│ 14 rows 12 columns │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
D
#背景
BIツールの開発をしていて、DuckDBのブラウザのUIで下記のようにテーブルのサマリが表示されて便利だなと思ったので、どうやっているのかをGeminiに聞いたら、SUMMARIZE関数を教えてくれました。
#参考リンク

#まとめ
今回は、DuckDBのSUMMARIZE関数を紹介しました。
この関数は、データの概要を把握するのに非常に便利で、特にデータの前処理や分析を行う際に役立ちます。
DuckDBはこういう既存のDBMSの型に囚われない便利な機能が多いので、好感があります。
