dbt とは何か:「SQL + Git で変換を書く」が変えたもの
dbt は ELT の T (Transform) を、生 SQL + Jinja + バージョン管理で書く仕組み。BigQuery / Snowflake 等の DWH 上で動く。なぜこれが革命的だったのか、何が解決され、何が新たな課題になったかを 10 分で。
dbt Core vs dbt Cloud と環境セットアップ:どちらを選び、どう動かすか
dbt Core (OSS、無料、自前運用) と dbt Cloud (SaaS、有料、IDE/スケジューラ込み)。判断軸と、ローカルでの初回セットアップ手順を BigQuery / Snowflake で。
プロジェクト構造と最初の dbt run:staging → marts のレイヤを組む
dbt の標準プロジェクトレイアウト (staging / intermediate / marts) と命名規則。生データ → 整形 → 集計 の3層を実例で組み、初回 `dbt run` までを通す。
ref() と source() で依存関係を組む:dbt の核心
dbt の `ref()` `source()` は単なるテーブル参照ではなく、依存グラフを宣言する仕組み。これを正しく使うと環境切替・並列実行・lineage が自動で手に入る。具体例と落とし穴を整理。
materialization 4種の使い分け:view / table / incremental / ephemeral
model がどう DWH に物理化されるかを決める materialization。性能・コスト・鮮度のバランスで選ぶ判断軸。incremental は EP.11 で深掘り、本記事は 4 種の比較。
テストの書き方:4つの組込み + generic test + singular test
dbt の組込みテスト 4 種 (unique / not_null / accepted_values / relationships) と、自分で書く generic test / singular test の使い分け。CI で必ずブロックすべきテストの設計指針。
ドキュメント生成:schema.yml と dbt docs を本気で書く
dbt docs は 自動 lineage と model/カラム説明を 1 つの web UI にまとめる。description を真面目に書くと「これ何のテーブル?」問い合わせが激減する。書き方のコツと CI 必須化の手順。
macros:Jinja で SQL を再利用する
同じパターンの SQL を10個書きそうになったら macro を書こう。Jinja の基本構文と、現場で繰り返し作る代表的な macro 5 つ (PII マスキング / 期間集計 / pivot 等) を整理。
packages:dbt_utils と dbt-expectations を使い倒す
dbt_utils は標準装備したい SQL ヘルパー集、dbt-expectations は Great Expectations 風の検証群。よく使う関数を 15 個ピックアップして実例で。
seeds と snapshots:静的データと SCD Type 2
seeds は CSV を DWH にロードする仕組み (国コード等の小規模マスタに最適)。snapshots は変更履歴を残す SCD Type 2 を 1 設定で実現する強力機能。両者の使い分けと落とし穴。
incremental models:大規模ログの差分更新パターン
テーブルが 1 億行を超えると table materialization では時間とコストが破綻する。incremental の 4 つの戦略 (append / merge / delete+insert / insert_overwrite) と、各 DWH での違い。
CI/CD:Slim CI で安全にデプロイ、PR ごとに差分を検証
「PR で変更した model だけビルドしてテストして、本番に影響しない隔離スキーマで実行」を実現する Slim CI。GitHub Actions と dbt Cloud の両方で構築する手順。
dbt Mesh:大規模組織でプロジェクトを分割し、再利用する
model 数が 数千を超える組織で、1 つの dbt プロジェクトでは限界が来る。dbt Mesh はプロジェクト間で model を「公開・参照」する仕組み。Group / Access / Versioning の使い方。
Semantic Layer / Metrics:指標の正本管理で「数字の食い違い」をなくす
「営業の言う売上」と「経理の言う売上」が違う問題を構造的に解く。dbt の Semantic Layer + MetricFlow で metric を 1 ヶ所に定義、Looker / Tableau / Slack Bot から同じ定義で参照する設計。
アンチパターン10選:現場で本当に困る dbt の落とし穴
受託案件で繰り返し見てきた失敗 10 個。「全モデル table」「dbt おじさん化」「テスト 0 個」「source 直参照」「macro 過剰」など。それぞれの再現状況・気づくシグナル・処方箋を。
まずは、現状を聞かせてください。
要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。