DuckDBは、組み込み型の高速分析データベースエンジンです。
「SQLiteがOLTP(トランザクション処理)向けなら、DuckDBはOLAP(分析処理)向け」というイメージです。
目次
特徴
- 組み込み型
- SQLiteのようにアプリに直接組み込み可能で、サーバーを立てずに動きます。
- Python、C/C++、Java、Node.jsなどから利用可能。
- 分析処理に特化
- 列指向ストレージ方式を採用(分析で有利)。
- 大規模データの集計・集約が高速。
- PandasやArrowとシームレスに連携。
- インストールが簡単
- Pythonなら
pip install duckdb
で使える。 - 追加のサーバーセットアップ不要。
- Pythonなら
- 大容量ファイルの直接読み込み
- CSV、Parquet、JSONなどを直接SQLでクエリ可能。
SELECT * FROM 'data.parquet'
のようにファイルをテーブルのように扱える。
- マルチスレッド処理対応
- 複数コアを使った並列処理で高速化。
Pythonでの簡単な使い方例
import duckdb # メモリ上にDB作成 con = duckdb.connect() # データ作成 con.execute("CREATE TABLE items(id INTEGER, name VARCHAR, price DOUBLE)") con.execute("INSERT INTO items VALUES (1, 'apple', 120.5), (2, 'banana', 98.0)") # SQLで集計 result = con.execute("SELECT AVG(price) FROM items").fetchall() print(result) # [(109.25,)]
ファイルを直接クエリ
import duckdb con = duckdb.connect() # CSVやParquetを直接参照 df = con.execute("SELECT * FROM 'data.parquet' WHERE amount > 100").df() print(df)
- 中間テーブルを作らず、直接ファイルに対してSQLが打てるのが強み。
他のDBとの違い
項目 | DuckDB | SQLite | PostgreSQL/MySQL |
---|---|---|---|
用途 | 分析(OLAP) | 小規模トランザクション(OLTP) | 汎用 |
ストレージ | 列指向 | 行指向 | 行指向 |
サーバー | 不要 | 不要 | 必要 |
大規模分析 | ◎ | △ | ◯ |
ファイル直クエリ | ◎ | × | × |