dbtとはどんなデータ変換ツールか
dbt(data build tool)は、ELTパイプラインの「T(Transform)」を担当するOSSツールだ。SQLのSELECT文でデータウェアハウス内の変換ロジックを定義し、ソフトウェアエンジニアリングのベストプラクティス(バージョン管理、テスト、CI/CD)をデータ変換に適用できる。
Snowflake、BigQuery、Redshift、PostgreSQL、DuckDBなど主要なデータウェアハウスに対応している。
主な機能とデータ変換での強み
- SQLベースの変換定義:SELECT文を書くだけで、テーブルやビューの作成・更新を自動化
- Jinjaテンプレート:SQLにマクロや変数を組み込み、再利用可能なロジックを構築
- 自動DAG生成:
ref()関数でモデル間の依存関係を定義すると、実行順序を自動決定 - データテスト:
not_null、unique、relationshipsなどのスキーマテストを宣言的に定義 - 自動ドキュメント生成:モデルの説明、カラム定義、リネージグラフをWebサイトとして自動生成
- インクリメンタルモデル:大規模テーブルの差分更新に対応し、処理時間を短縮
- パッケージエコシステム:dbt-utils、dbt-expectationsなど共有パッケージで機能拡張
インストールとプロジェクトの始め方
# PostgreSQL向け
pip install dbt-postgres
# Snowflake向け
pip install dbt-snowflake
# BigQuery向け
pip install dbt-bigquery
# DuckDB向け(ローカル開発用)
pip install dbt-duckdb
プロジェクトの初期化:
dbt init my_project
cd my_project
モデルの作成例(models/staging/stg_orders.sql):
SELECT
id AS order_id,
user_id,
order_date,
status,
amount
FROM
WHERE status != 'cancelled'
集計モデル(models/marts/orders_summary.sql):
SELECT
user_id,
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
MIN(order_date) AS first_order,
MAX(order_date) AS last_order
FROM
GROUP BY user_id
実行コマンド:
# 全モデルを実行
dbt run
# テストを実行
dbt test
# ドキュメント生成・閲覧
dbt docs generate
dbt docs serve
スキーマテストの定義例
models/staging/schema.yml:
models:
- name: stg_orders
columns:
- name: order_id
tests:
- not_null
- unique
- name: status
tests:
- accepted_values:
values: ['pending', 'shipped', 'delivered']
- name: user_id
tests:
- relationships:
to: ref('stg_users')
field: user_id
競合ツールとの比較
| ツール | 変換言語 | DAG | テスト | ドキュメント |
|---|---|---|---|---|
| dbt | SQL + Jinja | ◎ ref()で自動 | ◎ 組み込み | ◎ 自動生成 |
| SQLMesh | SQL + Python | ◎ 自動 | ○ 対応 | ○ 対応 |
| Dataform | SQL + JS | ○ 対応 | ○ 対応 | ○ BigQuery中心 |
| Apache Spark | Scala/Python/SQL | △ 手動 | △ 別途実装 | △ 手動 |
差別化ポイント:dbtはSQLエンジニアの学習コストが最も低く、テスト・ドキュメント・リネージの自動化が充実している。SQLMeshはdbtの後発として仮想環境やCI改善を打ち出しているが、エコシステムの成熟度ではdbtが圧倒的。
データパイプラインでの位置づけ
Apache Airflowでスケジューリングし、dbtで変換処理を実行する構成が定番だ。ローカル開発ではDuckDBをdbtのアダプターとして使えば、クラウドに接続せずにモデルのテストが可能。
データソースの前処理にはPolarsで高速にクレンジングしてからdbtに渡す手法も有効だ。
まとめ:dbtが向いているケース
dbtは「データウェアハウスでの変換処理を、テスト付きで管理・運用したい」チームに最適だ。SQLの知識があればすぐに使い始められ、データアナリストとデータエンジニアの協業を効率化できる。