データ分析をやっていると、「Pandasだと遅い」「BigQueryは大げさ」「もっとサクッと大量データを集計したい」と思うことが結構あります。そんな時に出会ったのがDuckDBというデータベースで、使ってみたら想像以上に便利だったので紹介してみます。

DuckDBとは何か

DuckDBは、オランダのCWI(Centrum Wiskunde & Informatica)で開発されたオープンソースのOLAP(分析処理特化型)データベースです。見た目はSQLiteのようにサーバーレス・単一ファイルで動くのですが、中身は分析クエリに最適化されたカラムナストレージエンジンになっています。

SQLiteが「トランザクション処理(OLTP)」に強いのに対して、DuckDBは「分析処理(OLAP)」に強い、というのがざっくりした違いですね。

DuckDBが注目される理由

インストール不要に近い手軽さ

Pythonならpip install duckdb一発です。サーバーの起動もコンフィグもいりません。import duckdbしてSQLを書くだけでデータ分析を始められるのは、かなり気楽です。

import duckdb
result = duckdb.sql("SELECT * FROM 'sales_data.parquet' WHERE amount > 1000")
result.show()

このコードを見て気づいた方もいると思いますが、Parquetファイルを直接クエリできます。CSVやJSON、さらにはExcelファイルもSQLで直接読み取れるんですよね。

カラムナストレージの威力

従来のSQLiteやMySQLは行指向のストレージです。1レコード(行)のデータがまとまって保存されるので、特定の行を取得する操作が得意です。

一方、DuckDBはカラムナ(列指向)ストレージを採用しています。同じカラムのデータがまとまって保存されるため、「売上カラムの合計」「日付カラムのグルーピング」のような分析クエリが圧倒的に速くなります。PostgreSQLで数分かかるような集計クエリが、DuckDBなら数秒で終わることも珍しくありません。

Pandasよりも速い

Pythonのデータ分析でお馴染みのPandasと比較すると、DuckDBは大規模データセットで圧倒的な速度差を見せます。特にメモリに収まりきらないサイズのデータ(数GB〜数十GB)を扱う場合、Pandasがメモリ不足でクラッシュするところをDuckDBはストリーミング処理でこなしてくれます。

DuckDBの実践的な使い方

CSVファイルの高速分析

手元にあるCSVファイルをサクッと分析したい時、DuckDBの真価が発揮されます。

import duckdb

# CSVを直接クエリ(テーブル作成不要)
duckdb.sql("SELECT category, COUNT(*) as count, AVG(price) as avg_price FROM 'products.csv' GROUP BY category ORDER BY count DESC").show()

テーブルを作成する必要すらないのが便利ですね。ファイルパスをそのままFROM句に書けます。

複数ファイルの横断クエリ

ワイルドカードを使えば、複数のファイルを1つのテーブルとして扱えます。月別に分かれたログファイルの分析にぴったりの機能です。

-- 2026年の全ログファイルを横断検索
SELECT * FROM 'logs/2026-*.parquet'
WHERE error_code IS NOT NULL
ORDER BY timestamp DESC
LIMIT 100;

S3のデータを直接クエリ

httpfs拡張を使えば、Amazon S3やGCS上のファイルもローカルと同じ感覚でクエリできます。データレイクのアドホック分析に重宝している方が多い印象です。

DuckDBとSQLiteの使い分け

「じゃあSQLiteの代わりにDuckDB使えばいいの?」と思うかもしれませんが、そうではありません。両者は設計思想が異なるため、用途に応じて使い分けるのが正解です。

SQLiteが適しているケースとして、アプリのローカルデータ保存、小規模なCRUD操作、モバイルアプリのバックエンドなどがあります。行単位の読み書きが頻繁に発生する場面ではSQLiteの方が効率的です。

DuckDBが適しているケースは、大量データの集計・分析、ログ解析、BIダッシュボードのバックエンド、RAGの前処理パイプラインなどです。

DuckDBのエコシステム

DuckDBの周辺ツールも充実してきています。EvidenceというBIツールはDuckDBをネイティブサポートしていて、マークダウンでデータダッシュボードを構築できます。

また、拡張モジュールも豊富で、JSONの処理、空間データのクエリ、Icebergテーブルの読み取りなど、必要に応じて機能を追加できます。WebAssembly版もあるので、ブラウザ上でDuckDBを動かすことも可能です。

まとめ

DuckDBは「SQLiteの分析版」とも呼べる存在で、手軽さと高速性を両立しているのが最大の魅力です。Pandasに限界を感じている方や、BigQueryほどの大規模環境は不要だけど集計処理を速くしたい方にとって、試してみる価値は大いにあると思います。

pip install duckdbから始められるので、気になった方はぜひ手元のCSVで試してみてください。

参考リンク