dbt exposure
#dbt
Exposuresとは
定義: dbtプロジェクトの「出口」を定義する仕組み目的:
データがどこで・どのように使われるかを可視化・管理
Exposureの種類(type)
1. dashboard - ダッシュボード
name: executive_dashboard
type: dashboard
description: "経営陣向けダッシュボード"
url: "https://tableau.company.com/executive"
depends_on:
ref('rpt_monthly_trends')
2. notebook - Jupyter等
name: sales_analysis
type: notebook
description: "売上分析ノートブック"
url: "https://jupyter.company.com/sales_analysis.ipynb"
3. application - アプリケーション
name: recommendation_api
type: application
description: "商品レコメンドAPI"
depends_on:
ref('ml_features')
4. ml - 機械学習(今回使用)
name: demand_prediction
type: ml
description: "需要予測モデル"
depends_on:
ref('training_set')
DAG上での表示
通常のモデル
形: 円形・四角形
色: 青系
種類: Table, View, Incremental等
Exposures
形: ダイヤモンド型
色: オレンジ・赤系
アイコン: 種類別(ダッシュボード📊、ML🤖等)
実際の活用例
1. 影響分析(Lineage)
fct_sales → sales_dashboard (exposure)
→ recommendation_api (exposure)
→ sales_analysis (notebook)
→ fct_salesを変更すると、3つの下流システムに影響することが分かる
2. 責任者の明確化
owner:
name: "Data Science Team"
email: "ds-team@company.com"
→ 問題があった時の連絡先が明確
3. 文書化・説明
description: |
目的: 売上トレンド分析
更新頻度: 日次
アクセス: 営業部長以上
技術: Tableau Server
今回の実装での効果
Before
int_stock_calculation → raw_predictions
↑ ↑
何してる? どうやって作られた?
After
int_stock_calculation → python_ml_predictions → raw_predictions
↑ ↑
(LightGBM処理 (CSV読み込み 説明・実行方法あり) 型安全)
運用上のメリット
1. データガバナンス強化
どのデータがどこで使われているか一目瞭然
変更の影響範囲を事前に把握可能
2. チーム間連携の改善
営業チームのダッシュボード
name: sales_dashboard
owner:
name: "営業部"
email: "sales@company.com"
depends_on:
ref('fct_sales') # データチーム管理
→ データ変更時に営業部に通知が飛ぶ仕組みが作れる
3. 外部システムとの統合
AIモデルのデプロイ
name: prod_ml_model
type: ml
url: "https://api.company.com/predict"
meta:
deployment_date: "2025-01-15"
model_version: "v2.1"
実践的な使い方
1. 段階的導入
Phase 1: 主要ダッシュボードのみ
name: executive_dashboard
type: dashboard
Phase 2: ML系を追加
name: recommendation_model
type: ml
Phase 3: 全てのアプリケーション
name: customer_api
type: application
2. テンプレート化
templates/exposure_template.yml
name: "{{ exposure_name }}"
type: "{{ type }}"
description: |
目的: {{ purpose }}
責任者: {{ owner_team }}
更新頻度: {{ frequency }}
owner:
name: "{{ owner_name }}"
email: "{{ owner_email }}"
3. CI/CDとの統合
デプロイ前チェック
dbt run --select +exposure:prod_dashboard
→ ダッシュボードに影響するモデルをテスト
制限・注意点
1. 実行されない
Exposureは「情報」のみ
実際のダッシュボード更新等は別途必要
2. メンテナンスが必要
URLが変わったら更新
責任者が変わったら更新
3. 過度に作りすぎない
本当に重要な出口のみ
管理コストを考慮
まとめ
Exposuresは「データの出口管理」のための仕組み。今回の様に外部処理(Python)を可視化する用途に
も使える。
効果:
✅ データフローが一目瞭然✅ 責任者・連絡先が明確✅ 影響分析が容易✅ ドキュメント化の促進
ベストプラクティス:
本当に重要な出口のみ定義
責任者情報を必ず記載
定期的にメンテナンス
段階的に導入
今回の実装は「外部処理の可視化」という、まさにExposuresの真骨頂を活用した例ですね!