DuckDBのSUMMARIZE関数が便利

DuckDB

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 │
varcharvarcharvarcharvarchar             │     int64     │ varcharvarcharvarcharvarcharvarchar            │ int64 │  decimal(9,2)   │
├─────────────────┼──────────────────────┼──────────────────────┼─────────────────────────────────┼───────────────┼─────────┼─────────┼───────────────────────────────┼────────────────────────────┼───────────────────────────────┼───────┼─────────────────┤
│ event_id        │ UUID                 │ 0068b43e-470a-4dcb…  │ ffffdd94-89a3-463a-8cff-5a718…  │           326NULLNULLNULLNULLNULL3160.00
│ website_id      │ UUID                 │ 133d11de-3f81-4c3c…  │ 133d11de-3f81-4c3c-91c2-69a3f…  │             1NULLNULLNULLNULLNULL3160.00
│ session_id      │ UUID                 │ 1b2f7fc5-ef60-5f2d…  │ f49a79bd-834f-5b8a-884e-5402b…  │            15NULLNULLNULLNULLNULL3160.00
│ created_at      │ TIMESTAMP WITH TIM…  │ 2025-03-31 11:01:2…  │ 2025-04-10 11:53:08.477+09322NULLNULL2025-04-04 10:29:55.927125+092025-04-09 09:50:13.599+092025-04-09 10:06:18.325438+093160.00
│ url_path        │ VARCHAR//works                          │            20NULLNULLNULLNULLNULL3160.00
│ url_query       │ VARCHAR              │                      │                                 │             1NULLNULLNULLNULLNULL3160.00
│ referrer_path   │ VARCHAR//works                          │            17NULLNULLNULLNULLNULL31648.73
│ referrer_query  │ VARCHAR              │                      │                                 │             1NULLNULLNULLNULLNULL31648.73
│ referrer_domain │ VARCHARNULLNULL0NULLNULLNULLNULLNULL316100.00
│ page_title      │ VARCHAR              │ Datastreamを使って…  │ 自宅のインターネット速度が遅…   │             7NULLNULLNULLNULLNULL31644.94
│ event_type      │ INTEGER1111.00.01113160.00
│ event_name      │ VARCHARNULLNULL0NULLNULLNULLNULLNULL316100.00
│ visit_id        │ UUID                 │ 02d24330-3d38-5b98…  │ e18b2824-3ba7-5ed4-8eb7-94bfb…  │            33NULLNULLNULLNULLNULL3160.00
│ tag             │ VARCHARNULLNULL0NULLNULLNULLNULLNULL316100.00
├─────────────────┴──────────────────────┴──────────────────────┴─────────────────────────────────┴───────────────┴─────────┴─────────┴───────────────────────────────┴────────────────────────────┴───────────────────────────────┴───────┴─────────────────┤
14 rows                                                                                                                                                                                                                                         12 columns │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
D 

#背景

BIツールの開発をしていて、DuckDBのブラウザのUIで下記のようにテーブルのサマリが表示されて便利だなと思ったので、どうやっているのかをGeminiに聞いたら、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. Usage In order to summarize the contents of a table, use SUMMARIZE followed by the table name. SUMMARIZE tbl; In order to summarize a query, prepend SUMMARIZE to a query. SUMMARIZE SELECT * FROM tbl; Example Below is an…
Summarize favicon duckdb.org
Summarize

#まとめ

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