青の統計学-DS Playground-

dbt project を安全に運用する

Stage 5 — 第3章(Capstone) | dbt入門カリキュラム 推定学習時間:50〜60分 | 難易度:★★★★☆


この章で学ぶこと

ここまで analytics_mcp/dbt/dsplayground/staging → intermediate → mart → test → macro → snapshot → exposure を追ってきました。 最終章では 運用スキーマGitHub Actionsdocs artifact の境界を学び、トラック全体を 1 枚の地図 に収めます。

コードは実行しません。warehouse 資格情報も扱いません。 データマネジメント入門データアナリティクス入門 で学んだ「信頼できる数字の仕組み」が、dbt プロジェクトで どう実装されているか を振り返ります。

この章を終えると、こんなことができるようになります:

  • analyticsanalytics_ci の役割分担を説明できる
  • dbt docs が 公開 Pages ではなく CI artifact である理由を説明できる
  • 主要 caveats(membership proxy、latest-state accuracy、anon キー)を 一覧で 説明できる
  • Stage 1〜5 の学習経路を自分の言葉で要約できる

本番 schema と CI schema

dbt プロジェクトをチームで運用するとき、本番 BI が読む schemaPR 検証用 schema は分けます。

観点 本番 schema CI schema
目的 ダッシュボード・定期レポート PR / push の build 検証
更新 日次 workflow + 手動 マージ前の自動 build
リスク 誤った SQL が KPI を壊す 本番への影響はない

PR 上の実験的 SQL が 本番ダッシュボードを壊さない ためです。 レイク・DWH・マート の「分析環境分離」と同型です。

flowchart LR subgraph prod["本番"] GA1["定期 workflow"] --> A["本番 schema"] A --> BI["BI ツール"] end subgraph ci["CI"] GA2["PR / push workflow"] --> C["CI 専用 schema"] C --> T["dbt build + test"] T --> ART["CI artifact"] end REPO["dbt プロジェクト"] --> GA1 REPO --> GA2

CI パイプライン

典型的な CI ジョブは次を一括実行します。

  1. dbt build(run + test)
  2. schema tests(YAML の data_tests
  3. singular tests(tests/*.sql
  4. dbt docs generate(lineage 含む)

secrets(warehouse 接続情報)は repo 設定にのみ置き、カリキュラムや公開ドキュメントには載せません。 CI ログと artifact 名を知っていれば、マージ前に品質ゲートが走っている ことを確認できます。


dbt docs と artifact 配布

dbt docs generate は、モデル SQL・列メタデータ・lineage・exposure まで含む 内部向けドキュメント を生成します。

公開 Web(GitHub Pages 等)に載せない理由は、公開範囲の最小化 です。

公開 Pages にしない理由
内部 SQL の露出 mart 定義・ビジネスルール
infra 情報 schema 名、接続先の手がかり
PII 設計の詳細 user_id 扱い、疑似匿名キー

社内利用者は CI artifact から index.html を開き、lineage グラフ で exposure まで追います。 ガバナンス実践 の考え方と一致します。


テスト戦略の全体像

種類 役割
schema test not_null, unique, accepted_values grain・列の基本契約
singular test 複数表・複合条件の SQL 断言 ビジネスルール
macro 依存 派生指標の範囲チェック 再利用ロジックの妥当性

テストは ドキュメント でもあります。 品質 6 軸 の「完全性・一意性」を CI で自動化したイメージです。

宣言的契約(schema test)と手続き的断言(singular test)を CI 上の dbt build で回す——これが dbt プロジェクトの標準的な品質モデルです。


2 つの schema

schema 用途 更新タイミング
analytics Metabase が読む 本番 mart 日次 JST 06:00 + 手動 workflow
analytics_ci PR / push の 検証 build dbt-ci.yml

DBT_USER は read-only on public + write on 対象 schema のみ(README 参照)。

PR 時に mart を build する schema として CI 専用 schema を使うことで、本番 analytics を守ります。


GitHub Actions

dbt-daily.yml(本番)

  • DBT_SCHEMA=analytics
  • dbt build — run + test
  • docs artifact 保存

dbt-ci.yml(検証)

  • DBT_SCHEMA=analytics_ci
  • push / PR で dbt build + test + docs generate
  • 本番 Metabase は更新しない

会議前チェックリスト(Capstone)

DS Playground analytics を 会議で使う前 に確認する caveats 一覧です。 分析前チェックリスト を dbt 版として使えます。

# トピック 覚えておくこと
1 Membership terms 同意 proxy。Auth 直読みしない
2 Active User Learning Action ベース。ベース DAU は会員フィルタしない
3 unknown status 分割 mart で落とさず可視化
4 same_day_paid_conversion_rate 同日限定。母数小でブレる
5 member_status current-state。as-of には別モデル
6 problem accuracy latest-state。初回正答率ではない
7 incremental 14 日 lookback。古い修正は full-refresh
8 learning goal current のみ。履歴は snapshot 教学例
9 anon_user_key 疑似匿名。行レベル公開禁止
10 docs 内部 artifact。公開 Pages ではない

トラック全体の学習経路(Capstone 図)

flowchart TB START["なぜ dbt Core か
Stage 1"] --> LAYOUT["プロジェクト構成
Stage 1"] LAYOUT --> SRC["Sources / Staging
Stage 2"] SRC --> TEST["Schema / Singular tests
Stage 2"] TEST --> SEED["Seeds: practice_problem_catalog
Stage 2"] SEED --> INT["int_user_activity_events
Stage 3"] INT --> MART["Mart ファミリー設計
Stage 3"] MART --> MEM["Membership / Activity / Incremental
Stage 3"] MEM --> MON["int_member_status_current
Stage 4"] MON --> ENG["Engagement / Survey / Content
Stage 4"] ENG --> MACRO["safe_ratio
Stage 5"] MACRO --> SNAP["Snapshot + exposures
Stage 5"] SNAP --> OPS["analytics vs analytics_ci
docs artifact
Stage 5 Capstone"] OPS --> DM["データマネジメント入門
定義・品質・ガバナンス"] OPS --> DA["データアナリティクス入門
SQL・指標・マート思考"]

Stage 別ふりかえり

Stage 1 — なぜ dbt か

Supabase = ソース正本、dbt = transform SSOT、Metabase = 利用面。 再現可能な pre-monetization monitoring が目的(overview.md)。

Stage 2 — 信頼の土台

Thin staging、schema/singular test、seed catalog。 データ品質チェック SQL の upstream。

Stage 3 — コア mart

  • int_user_activity_events — Learning Action SSOT
  • Membership / conversion — terms proxy と転換率 caveats
  • Active user — faithful DAU + status 分割
  • Incremental — 14 日 lookback 教学例

Stage 4 — セグメントと研究

  • Monetization status — free / premium / former_premium
  • Engagement — tier + 分布 mart + anon 境界
  • Survey — goal share + multi-select unnest
  • Content quality — seed 分母 + outlier フラグ

Stage 5 — 再利用と運用

  • safe_ratio — 比率 SSOT
  • Snapshot + exposure — 履歴と dashboard lineage
  • CI / docs — 本番を守る build 規律

次の学習ステップ

方向 おすすめ
組織・責任・品質 データマネジメント入門 Capstone
SQL 実装力 Analytics ワークフロー
実プロジェクト analytics_mcp/README.md + models/overview.md を読み、docs artifact lineage を見る

体系コラム:カリキュラム上の位置づけ

項目 内容
Stage / 章 Stage 5 — 第3章(Capstone)
今回の論点 analytics / analytics_ci、artifact、全 caveats 統合、トラック総括
前章との接続 Snapshots と exposures
次章への伏線 トラック完結 → DM / Analytics へ

まとめ

レイヤ 学んだ SSOT
行動 int_user_activity_events
会員・課金 int_member_status_current + membership marts
比率 safe_ratio
分母 practice_problem_catalog seed
利用 exposures.yml
運用 analytics 本番 / analytics_ci 検証

dbt 入門は「SQL を書く教程」ではなく、DS Playground の analytics 定義を読み解き、会議で数字を説明できる状態 を目指しました。 transform・テスト・lineage・CI が一体になって初めて 信頼できるデータ になります。


関連教材


確認問題

問題 1

Pull Request 時に mart を build する schema として 一般的に望ましい のはどれですか。

A. OLTP の public スキーマ
B. CI 専用 schema(例: analytics_ci
C. 本番 analytics schema を常に上書き
D. アプリ認証 schema

正解: B

解説: CI は専用 schema で検証し、本番 schema を守ります。


問題 2

dbt docs を内部 artifact のみで配布する 主な理由 はどれですか。

A. dbt が HTML を生成できないから
B. 内部 SQL・schema・lineage などを公開 Web に載せないため
C. BI ツールが docs を読めないから
D. OLTP のポリシーで禁止されているから

正解: B


問題 3(Capstone 総合)

dbt プロジェクト全体の設計思想として 最も central な考え方はどれですか。

A. BI ダッシュボード JSON
B. intermediate 層で指標定義を SSOT 化し、marts は BI 向けに grain を固定する
C. GitHub Actions YAML のみ
D. OLTP テーブルを mart から直接読む

正解: B

解説: Transform の責務は 定義の固定(intermediate)問いへの回答(marts) の分離です。


問題 4(Capstone 総合)

このトラックで繰り返し登場する 品質ゲート の組み合わせとして最も適切なのはどれですか。

A. BI 上の目視のみ
B. schema tests(YAML)+ singular tests(SQL)+ CI 上の dbt build
C. seed ファイルの手動コピーのみ
D. macro のコメントアウト

正解: B

解説: 宣言的契約と手続き的断言を CI で回すのが、dbt プロジェクトの標準的な品質モデルです。


用語メモ(トラック総括)

用語 意味(このトラックでの使い方)
Learning Action 保存・完了・送信など明示的学習行動(6 type)
terms proxy 会員数 = terms 同意済み distinct user_id
current-state build 時点のスナップショット。履歴 as-of ではない
latest-state 最新保存状態のみ保持(初回イベント履歴ではない)
exposure Metabase 等の利用面を lineage に載せた宣言
analytics_ci CI 専用 schema。本番を汚さない
docs artifact CI が生成する内部 lineage ドキュメント(公開 Pages ではない)
SSOT 指標・定義の単一正本(intermediate / seed / マクロ)