dbt Fundamentals
Back to Contracts, Exposures & Unit Tests

Exposures: Documenting Downstream Consumers

Blast-radius analysis with exposures and dbt ls.

6 minutesInteractive tutorial
🎯 Free Guest Mode: You are learning for free. Sign in to save your completion progress and quiz answers.

Exposures declare downstream consumers (dashboards, notebooks, ML features) so dbt ls --select +exposure:name shows blast radius before you change a model.

exposures:
  - name: exec_revenue_dashboard
    type: dashboard
    owner: {name: analytics, email: analytics@example.com}
    depends_on:
      - ref('mart_daily_revenue')

Rules

  1. One exposure per real consumer. If the exec dashboard reads three marts, declare it once with all three dependencies — impact analysis then works.
  2. Run selection before refactors: dbt ls --select +exposure:exec_revenue_dashboard lists every model a change could break. Paste this into the PR.
  3. Exposures don't execute anything — they are lineage metadata. Pair each with a contract on the models it reads: contract enforces, exposure explains.
Question 1 of 4Answer saved0 answered

How should exposures map to downstream consumers?