[DuckDB]インプロセス分析データベース

ツール

DuckDB はよく「分析版 SQLite」と呼ばれます。マクロ経済データの可視化、あるいは大規模なログ解析など、大量のデータを高速に集計・分析する際に、これほど心強い味方はありません。

SQLite が「アプリケーションのデータ保存」に最適化されているのに対し、DuckDB は 「データの集計・分析(OLAP)」 に特化したインプロセス・データベースです。

1. DuckDB と SQLite の違い(比較表)

最も重要な違いは、データの持ち方(行指向か列指向か)です。

項目SQLiteDuckDB
設計思想OLTP (トランザクション処理)OLAP (分析・集計処理)
ストレージ行指向 (Row-based)列指向 (Columnar)
得意な操作特定の1行の読み書き、高速な挿入大量のデータの集計 (SUM, AVG), 全件走査
ライブラリC, PHP, Python, 各種言語に標準搭載Python (Pandas/Polars) との親和性が極めて高い
外部ファイル基本は .sqlite ファイルParquet, CSV, JSON を直接 SQL で叩ける
依存性なし(単一バイナリ)なし(単一バイナリ)

2. エンジニアが DuckDB を使うべき「使い所」

① 時系列データの集計

数百万行、数千万行におよぶ 時系列データから、特定の期間の平均や最大値、最小値を計算する場合、SQLite よりも圧倒的に高速です。列指向ストレージのおかげで、必要なカラムのみをメモリに載せて計算できるからです。

② Pandas / Polars の「SQL インターフェース」として

Python でデータ処理をする際、複雑な df.groupby().join() を書く代わりに、DuckDB を使えば慣れ親しんだ SQL で DataFrame を直接操作できます。

③ データレイクの「簡易ブラウザ」として

S3 やローカルにある大量の Parquet ファイル。わざわざ DB にインポートしなくても、DuckDB なら SELECT * FROM 'data/*.parquet' WHERE ... と書くだけで、その場で超高速に検索・集計が可能です。

3. インストールと基本操作(ステップ・バイ・ステップ)

技術者視点で、Ubuntu や Mac で今すぐ試せる手順を紹介します。

Step 1: インストール

単一バイナリなので、インストールは一瞬です。

  • Python 環境 (推奨):Bashpip install duckdb
  • CLI (Ubuntu):Bashwget https://github.com/duckdb/duckdb/releases/download/v1.0.0/duckdb_cli-linux-amd64.zip unzip duckdb_cli-linux-amd64.zip sudo mv duckdb /usr/local/bin/

Step 2: CSV や Parquet を直接 SQL で叩く

DuckDB の真骨頂は「インポート不要」な点です。

-- CLIを起動
duckdb

-- CSVファイルを直接テーブルとして読み込んで集計
SELECT category, SUM(price) 
FROM read_csv_auto('sales_data.csv') 
GROUP BY category;

-- Parquetファイルも同様
SELECT * FROM 'history_data/*.parquet' LIMIT 5;

Step 3: Python での活用

Pandas との連携がシームレスです。

import duckdb
import pandas as pd

# PandasのDataFrameを作成
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

# DuckDBでこのDataFrameをSQL操作
res = duckdb.query("SELECT a + b AS sum_ab FROM df").to_df()
print(res)

4. DuckDB 導入の技術的メリット

  1. ベクトル化実行エンジン: CPU の SIMD 命令を活用して、一度に大量のデータを処理するため、集計クエリが爆速です。
  2. メモリ管理の良さ: メモリに収まりきらないデータも、自動的にディスクを使って(Spilling to disk)処理を継続します。
  3. ポータビリティ: SQLite 同様、設定ファイルやサーバー構築は不要。プロジェクトのリポジトリにバイナリを置いておくだけで動きます。

まとめ

SQLite は「書き込みと永続化」のために、DuckDB は「大量データの読み込みと分析」のために。

この「兄弟」を使い分けることで、ローカル環境でのデータ処理効率は劇的に向上します。

コメント

タイトルとURLをコピーしました