DuckDB(ダックディービー)は、「SQLite for analytics(分析用のSQLite)」とも呼ばれる、軽量で高速な列指向のOLAP(オンライン分析処理)向けデータベースエンジンです。
主に分析用途に特化して設計されており、Pythonとの親和性が非常に高く、PandasやNumPyなどのツールと組み合わせて使う場面が多いです。
目次
DuckDBとは何か
特徴 | 説明 |
---|---|
エンジン種別 | 列指向のインメモリ型(分析特化) |
ストレージ | シングルファイル or メモリ上のみで処理も可能 |
利用用途 | データ分析、ETL、軽量なDWH(データウェアハウス) |
主な競合 | SQLite(汎用OLTP)、Pandas(Pythonの分析ライブラリ)、Polars、ClickHouse、BigQueryなど |
特徴的な点 | Pandas DataFrameをSQLで直接操作できる、インストールが簡単、ファイルベースで完結する |
DuckDBのメリット
- インストールが非常に簡単
pip install duckdb
- PandasやParquetなどのデータ形式を直接読み書きできる
- CSV, Parquet, Arrow, Pandas DataFrame を
FROM
句で直接扱える - HDF5やSQLiteのような事前のスキーマ定義は不要
- CSV, Parquet, Arrow, Pandas DataFrame を
- SQLでPandasのデータを操作可能
- DataFrameを
duckdb.query("SELECT ... FROM df")
のように扱える
- DataFrameを
- 列指向なので分析クエリが非常に速い
- 例えば
SELECT COUNT(*)
,GROUP BY
,JOIN
,AVG()
などの集計処理に強い
- 例えば
- 軽量
- バイナリサイズが小さく、依存も少ない
- サーバー不要。ファイル一つで完結(もしくはインメモリで完結)
- Jupyter Notebook との相性が良い
- SQLセルマジック(
%%sql
)と組み合わせやすい
- SQLセルマジック(
基本的な使い方(Python)
import duckdb
import pandas as pd
# DataFrameの準備
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35]
})
# SQLでDataFrameを操作
result = duckdb.query("SELECT name, age FROM df WHERE age > 28").to_df()
print(result)
DuckDBを使った実用的なユースケース
- 大量のCSVログを集計・可視化する前処理
- Pandasのメモリ使用量が厳しいときの代替
- ETL処理の中間処理エンジンとして利用
- S3やローカルにあるParquetファイルをJOINして分析
- Jupyter NotebookでSQLクエリとPythonを組み合わせる分析作業
SQLiteとの違い(比較)
特徴 | DuckDB | SQLite |
---|---|---|
データ構造 | 列指向 | 行指向 |
最適用途 | 分析・OLAP | トランザクション・OLTP |
JOINの最適化 | 高性能 | 基本的だが堅実 |
大容量データの処理 | 得意(列単位で読み込み) | 苦手(全行読み込み) |
Pandas連携 | 直接可能 | 変換が必要 |
並列処理 | 内部的に利用 | 単一スレッド |
DuckDBと他ツールとの違い(Pandas, Polars, BigQuery)
特徴 | DuckDB | Pandas | Polars | BigQuery |
---|---|---|---|---|
実行モデル | SQLベース | Pythonコード | Rustベース | クラウドSQL |
処理速度 | 高速(列指向) | 小中規模向き | 非常に高速 | 大規模分散処理に最適 |
データ形式対応 | CSV, Parquet, Pandas | CSV, Excel, etc. | Parquet, Arrow | GCS, Bigtable |
スケーラビリティ | ローカルで中〜大規模 | メモリ制限あり | マルチスレッド | 自動スケール |
SQL操作 | 可能 | 不可(別途処理) | SQL非対応 | 完全にSQL |
進んだ機能(中級〜上級)
- Window関数 や CTE(WITH句) の対応
- マテリアライズドビュー的な一時テーブル
IMPORT DATABASE
で他のフォーマットも読み込み可- Arrow Tableとの互換性
- S3、Google Cloud Storageからの直接読み込み(パッケージを追加すれば可能)
まとめ

DuckDBは、SQLを使って高速にローカルデータを分析できる非常に強力なツールです。
特に以下のような方におすすめです。
- Pandasでは処理が重すぎると感じている人
- SQLの力を活かしたいPythonユーザー
- データサイエンティストやアナリストで、ETLやAd-hoc分析を効率化したい人
- 軽量なデータウェアハウスが欲しいが、BigQueryやRedshiftは重すぎると感じている人
以上、PythonのDuckDBについてでした。
最後までお読みいただき、ありがとうございました。