「SQLiteのOLAP版」と表現されることの多いDuckDBは、インプロセス型の高速分析データベースです。インストール不要、クラウド契約不要、サーバー不要で、Pythonに数行書くだけで数GBのParquetをSQLで分析できます。本記事ではDuckDBの仕組み・使い方・エコシステムを、コード例付きで解説します。
DuckDBとは何か――「SQLiteのOLAP版」
DuckDBはオランダCWI(Centrum Wiskunde & Informatica)が開発したオープンソースの分析用DBで、2019年に最初のリリースが公開されました。特徴は「インプロセス型」であること、すなわちアプリケーションと同じプロセス内で動作し、サーバーやデーモンを必要としません。これはトランザクション処理向けのSQLiteと同じ思想ですが、DuckDBは分析処理(OLAP)に特化している点が異なります。
PythonからはpipでインストールしてImport一発、Rからも同様に簡単に利用できます。CSV・Parquet・JSONを直接クエリでき、Pandas DataFrameとゼロコピーで連携できるため、データサイエンティストにとっても馴染みやすい存在です。
DuckDBの仕組みと特徴
DuckDBの高速性を支えるのは3つの技術要素です。カラムナーストレージ、ベクトル化実行エンジン、ゼロコピー読み取りです。カラムナーストレージにより必要なカラムだけを読み込み、ベクトル化実行により1度の命令で大量の行を処理し、ゼロコピーによりPandas/Arrow/Parquetとメモリを共有します。
アーキテクチャ全体を簡単な図で示すとこうなります。
【DuckDBアーキテクチャ概念図】
[Application Process]
|
+--> DuckDB Library (embedded)
|
+--> SQL Parser / Optimizer
|
+--> Vectorized Execution Engine
|
+--> Columnar Storage
|
+--> Storage Layer (reads)
|
+--> .duckdb file (local)
+--> Parquet / CSV / JSON (zero-copy)
+--> S3 / GCS (httpfs extension)
+--> Pandas / Arrow DataFrame
※ DuckDBはアプリと同一プロセスで動作するため、ネットワーク往復が発生しません。
DuckDBのユースケース
DuckDBはクラウドDWHの代替ではなく、補完的な立ち位置にあります。代表的なユースケースを表にまとめました。
| ユースケース | 概要 | メリット |
|---|---|---|
| ローカルデータ探索 | CSV / Parquetを直接SQL | セットアップ不要、速い |
| Parquet / CSV分析 | GB〜数十GB規模の分析 | クラウド課金が発生しない |
| CI/CDのデータテスト | GitHub Actionsで実行 | DWH費用を発生させずに検証 |
| dbt開発環境 | dbt-duckdbでローカル実行 | PRごとのDWH費用を抑制 |
| 埋め込み分析 | アプリに組み込む | 軽量、外部依存なし |
| アドホック分析 | Jupyterから即座にSQL | Pandasとシームレス連携 |
| 教育・学習 | SQL練習環境 | 無料でインストール即利用 |
DuckDBの使い方
最も基本的な使い方は、PythonからDuckDBを呼び出してCSVを読み込む方法です。以下のスクリプトで、CSVファイルに対して直接SQLを実行できます。
import duckdb
con = duckdb.connect()
df = con.execute("""
SELECT region, SUM(amount) AS total
FROM 'orders.csv'
WHERE created_at >= '2026-01-01'
GROUP BY region
ORDER BY total DESC
""").fetchdf()
print(df.head())
さらに強力なのはS3上のParquetを直接クエリできる点です。httpfs拡張を有効にするだけで、ダウンロード不要で分析を開始できます。
INSTALL httpfs;
LOAD httpfs;
SELECT COUNT(*), AVG(price)
FROM 's3://my-bucket/events/*.parquet'
WHERE event_date >= '2026-04-01';
dbt-duckdbを使えば、dbtプロジェクトをローカル環境のDuckDB上で実行できます。PR環境でDWH費用を発生させたくないチームに好適です。
# profiles.yml
my_project:
outputs:
dev:
type: duckdb
path: ./dev.duckdb
threads: 4
target: dev
DuckDBの限界
DuckDBは万能ではありません。主な限界は、メモリを超える大規模データ、同時接続数、本番のマルチユーザー環境の3点です。DuckDB 0.9以降はメモリ超過を溢れさせる機能(larger-than-memory処理)が追加されましたが、それでもTBクラスの本番ワークロードにはクラウドDWHの方が適しています。
| 観点 | DuckDB | クラウドDWH(Snowflake / BigQuery) |
|---|---|---|
| 主な用途 | ローカル分析 / 開発 | 本番の全社分析 |
| データ量 | GB〜数十GB推奨 | TB〜PB対応 |
| 同時接続 | 1プロセス | 多数のユーザー・クエリ |
| コスト | 無料 | クエリ量ベース課金 |
| 運用負荷 | ゼロ(インストール即利用) | コスト管理・権限設計が必要 |
| 向く場面 | PoC / 開発 / ETLの一部 | 本番基盤全般 |
DuckDBのエコシステム
DuckDB自体がシンプルである一方、その周辺エコシステムは急速に拡大しています。まず押さえておきたいのはMotherDuckです。これはDuckDB創業者らが立ち上げたクラウド版サービスで、ローカルDuckDBとクラウドを透過的に接続できます。
また、dbt-duckdbはdbtコミュニティで広く採用されているアダプターで、CI/CDや開発環境のコスト最適化に貢献しています。httpfs(クラウドストレージ接続)、spatial(地理空間)、json、excelなど、公式・非公式の拡張機能も豊富で、必要な機能を後付けできる柔軟性があります。
まとめ
DuckDBは「インストール不要、契約不要、速くて無料」という魅力的な条件を揃えた分析DBです。本番のクラウドDWHを置き換える存在ではありませんが、開発・CI・ローカル分析という領域で確固たる地位を築いています。まずはpipで入れて、お手元のCSVを投入してみることから始めましょう。
よくある質問
DuckDBは無料ですか?
はい。MIT Licenseの完全無料OSSです。クラウド版のMotherDuckは別途有料ですが、ローカル利用は無制限に無料です。個人・企業を問わず商用利用が可能です。
DuckDBはBigQueryの代替になりますか?
ローカルでの探索的分析やPoC・開発環境としては優秀ですが、本番のマルチユーザー環境やTBスケールのワークロードにはクラウドDWHが適しています。代替ではなく補完関係で活用するのが現実的です。
DuckDBでParquetファイルを分析できますか?
はい。DuckDBはParquet、CSV、JSONを直接SQLでクエリでき、S3 / GCS上のファイルもリモートからクエリ可能です。httpfs拡張を有効にすれば、ダウンロードなしで直接分析できます。