Data Platforms · 04 of 04 · dbt

SQL transformations, finally treated like software.

Tests, version control, lineage, CI, environments, contracts. dbt turned the data team into a real engineering team — and we've been shipping production dbt projects since it was a command-line tool with no UI.

2,400+Models in production
97%Avg. test coverage
PremierServices Partner
What we build with dbt

A model layer the engineer would build.

Not just templated SQL — a proper application with structure, tests, CI and contracts.

Project Structure

Sources, staging, intermediate, marts. Naming conventions that survive personnel change. Re-usable macros that don't become a second language.

Models · Macros · Seeds

Tests & Data Contracts

Generic + singular tests, dbt contracts with column-level types, freshness SLAs. The pipeline tells you it's broken before the dashboard does.

Tests · Contracts · Expectations

Lineage & Exposures

Lineage from source to BI dashboard. Exposures register the dashboards depending on your models — break one, the right Slack channel lights up.

DAG · Exposures · Lineage

CI & Slim CI

Pull-request CI with Slim builds, only modified DAG runs, defer to production state. Faster feedback, lower spend, fewer regressions.

CI · Slim CI · State Defer

Semantic & Metrics

dbt Semantic Layer for metric definitions consumed by BI, embedded analytics and Vertex / Mosaic models. One definition, many consumers.

Semantic Layer · Metrics · MetricFlow

dbt Cloud or Core

Cloud for the team that wants the IDE, scheduler and observability out of the box. Core for the team with strong infra muscle. Either way, opinionated.

Cloud · Core · Airflow · Dagster
Reference Project Layout

A project structure that scales past 1,000 models.

Naming conventions, layer separation, doc blocks, test density — the boring scaffolding that lets a dbt project hit 1,000+ models without becoming unmaintainable.

acme_analytics · dbt_project.yml
models/
staging/1:1 with sources · views
·stg_app__users.sql4 tests
·stg_stripe__charges.sql6 tests
·_stg_app__models.ymlcontracts
intermediate/cross-source joins · ephemeral
·int_users__joined.sqlephemeral
·int_orders__enriched.sqlephemeral
marts/business-ready · table or incremental
finance/
·fct_revenue.sqlincremental
·dim_customer.sqlSCD-2
growth/
·fct_signup_funnel.sqlincremental
macros/
·generate_schema_name.sql
·cents_to_dollars.sql
tests/612 generic + 14 singular
snapshots/3 SCD-2 sources
exposures/8 dashboards · 2 ML models
·profiles.ymldev / ci / prod

One conventions doc. 1,000 models that find each other.

The point of dbt isn't SQL — it's the application around the SQL. Naming, layers, contracts, doc blocks: a few conventions, applied consistently, let a team of 12 analysts ship to 12 dashboards a day without breaking each other.

  • 1
    Layer separation

    Staging is 1:1 with sources. Intermediate joins. Marts are business-ready. No layer-skipping.

  • 2
    Contracts at the boundary

    Public-facing models have schemas with types. Breaking the contract is a CI failure, not a Monday morning page.

  • 3
    Tests are the README

    Every model has tests. unique, not_null, accepted_values, relationships. The tests describe the data better than the doc block.

  • 4
    Exposures close the loop

    Dashboards and ML models register as exposures. Lineage runs end-to-end, alerts notify the right team.

The dbt surface area

dbt is a discipline, not just a CLI.

The tools we wire around dbt to make it the production system most teams underestimate it to be.

Adapters

SnowflakeBigQueryDatabricksRedshiftPostgres

Runtime

dbt Clouddbt Coredbt Fusion

Quality

dbt-utilsdbt-expectationsContractsElementary

Orchestration

dbt Cloud JobsAirflowDagsterPrefect

Semantic Layer

MetricFlowCubeLooker

Observability

ElementaryMonte CarloDatafoldre_data

Catalog

dbt DocsAtlanUnity Catalog

CI Add-ons

Datafold diffsRecceSQLFluff
Recent dbt work

Models scale. Trust scales with them.

Three quick takes.

FinServ · Snowflake + dbt rebuild

From 280 SQL views to 1,400 governed models.

Replaced an unowned SQL view sprawl with a layered dbt project, 95% test coverage, Datafold-diff CI, and a quarterly governance review.

1,400Models
0Dashboard breakage / mo
Snowflakedbt CloudDatafold
E-commerce · semantic layer

One revenue metric, six consumers.

MetricFlow definitions wired to Looker, embedded BI, ML feature store and Slack queries. The "what is revenue" Slack thread finally died.

1Source of truth
6Consumers
MetricFlowLookerCube
SaaS · Slim CI

Pull-request feedback in 90 seconds, not 28 minutes.

Slim CI defers to production state, only the modified DAG runs in CI, Datafold previews on the PR. Analysts merged 3× more often.

−95%CI runtime
PR merge cadence
Slim CIState DeferDatafold

SQL, finally treated like software.

30 minutes. Bring your dbt project (or your view sprawl) — we'll point to the three structural fixes that'll change how the team works.