dbtのExposuresはダッシュボード、アプリケーション、MLジョブなどの“データの利用側”をdbtプロジェクトに明示的に登録する仕組みです。
Exposuresは実行対象ではなくメタデータですが、系譜図、ドキュメントサイト、選択子による再構築の起点として強力に機能します。本稿では実装パターンと試験で問われやすい要点を整理します。
Exposuresは、dbtモデルやソースを消費する外部資産(BIダッシュボード、業務アプリ、バッチ/ストリーミングMLなど)をYAMLで宣言し、系譜に参加させるためのリソース種別です。宣言後はdbt docsの系譜図で上流・下流がつながり、選択子で上流の再実行をトリガできます。
代表的な効果は3つ。影響範囲可視化(どのダッシュボードが壊れ得るか)、変更駆動の再構築(+exposure選択で必要最小限を再実行)、責任の明確化(ownerフィールドで連絡先を一元管理)です。
typeはダウンストリームの性質を表します。一般的にdashboard、analysis、application、mlを用います。どの型でもdepends_onでref/sourceを列挙し、owner(name/email)とmaturity(low/medium/highなど)を指定します。urlとdescriptionは運用で価値が高いので省略しない方がよいです。
Exposuresは系譜上のシンクとして振る舞い、depends_onに列挙した上流ノードを境に影響範囲が閉じます。モデル追加・差し替えの際は、ダッシュボードが参照する派生マートが必ず列挙されているかをレビューします。
モデルから下流資産(Exposure)への系譜
実装はシンプルで、プロジェクト配下の任意のschema.ymlにexposuresセクションを追加します。depends_onにはrefとsourceを混在させられます。例ではLookerのダッシュボードを対象に、経営KPIマートと顧客ディメンション、そして生イベントのソースを紐づけています。
比較表で、Exposuresがモデルやソースとどう役割分担しているかを確認します。
| リソース | 目的 | 定義場所 | 実行対象か |
|---|---|---|---|
| Exposure | 下流資産の宣言と系譜接続 | schema.ymlのexposures | 実行されない(メタデータ) |
| Model | 変換ロジックの定義 | models配下のSQL+schema.yml | 実行される |
| Source | 生データの宣言と品質チェック | schema.ymlのsources | 実行されない(参照定義) |
exposuresのYAML定義例
version: 2
exposures:
- name: weekly_kpi_dashboard
type: dashboard
maturity: high
url: https://bi.example.com/dashboards/123
description: 経営KPIダッシュボード(週次更新)
owner:
name: BI Team
email: [email protected]
depends_on:
- ref('mart_kpi_summary')
- ref('dim_customer')
- source('app', 'events_raw')
tags: ['bi', 'executive']
meta:
tool: looker
schedule_cron: '0 7 * * 1'owner.emailはインシデントの一次連絡先として重要です。maturityは変更リスクの優先度付けに活用できます。urlはダッシュボードやアプリの実体に必ずリンクさせます。説明文には更新頻度、SLO、主要指標の定義などを短く入れておくと、docsサイトからの一次情報で十分に判断できます。
tagsとmetaは統制に効きます。tagsで領域や重要度をラベルし、metaには外部ツール識別子(例: tool=looker, tableau, superset)や運用スケジュール、所有部署コードを入れてクエリ可能にしておくと、棚卸し・影響分析が容易です。
Exposuresは選択子と組み合わせると真価を発揮します。+exposure:名前 で“Exposureの上流”を選び、必要最小限の再構築を実現できます。これはダッシュボードの健全性チェックや、特定アプリへの影響を限定した回帰テストに有効です。
変更差分に基づく再構築ではstate:modifiedと組み合わせ、変更のあったモデルから影響するmaturity=highのExposures上流のみをビルドする、といったガードレールを設計できます。スケジューラやCIでは、ビジネスクリティカルなExposure単位のジョブを用意しておくと運用が安定します。
CIの例: クリティカルExposureの健全性ジョブ
dbt build --select +exposure:weekly_kpi_dashboard --warn-error --fail-fastExposuresは実行対象ではない。YAMLで宣言し、系譜とdocsに表れる。上流の再構築は選択子(+exposure:...)で実現する。この3点は頻出です。
depends_onにはrefとsourceを混在できる。owner.emailは連絡先としてdocsに表示される。typeはダッシュボード等の種別で、挙動を変える設定ではなく分類目的である。これらは細かい設問として出やすいポイントです。
Analytics Engineer
問題 1
BIダッシュボードが参照するマートテーブルに変更を加える予定です。影響する上流のみを再構築し、ダッシュボードの破綻を未然に検知したい。最も適切なdbtの機能はどれですか?
正解: A
Exposuresは下流資産を系譜に結び、+exposure:選択子で上流のみを再構築できる。docsやパッケージ、マクロはこの目的に直接適合しない。
Exposuresは実行されますか?実行順序に影響しますか?
いいえ。Exposuresはメタデータであり、実行はされません。実行順序には直接影響せず、選択子で上流のモデルやテストを対象にする起点として機能します。
BIツールからExposuresを自動生成できますか?
dbt自体は自動生成機能を提供していません。運用では、BIツールIDやURLをmeta/urlに記録し、スクリプトや社内ツールでYAMLを管理するパターンが一般的です。
depends_onにはモデル名以外も書けますか?
はい。ref('model')とsource('source_name','table')を混在させられます。ダッシュボードが参照し得る上流(マート、ディメンション、重要ソース)を網羅的に列挙してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
dbt Model の基礎: SQL で定義する変換の最小単位
Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...
dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点
dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...
dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点
dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...
dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト
Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....
dbt_project.yml の読み方:主要設定と命名を最短で掴む
dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...