「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から即座にSQLPandasとシームレス連携
教育・学習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拡張を有効にすれば、ダウンロードなしで直接分析できます。