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
- One exposure per real consumer. If the exec dashboard reads three marts, declare it once with all three dependencies — impact analysis then works.
- Run selection before refactors:
dbt ls --select +exposure:exec_revenue_dashboardlists every model a change could break. Paste this into the PR. - Exposures don't execute anything — they are lineage metadata. Pair each with a contract on the models it reads: contract enforces, exposure explains.