← All courses

🧬 Analytics Engineering with dbt

The T in ELT with dbt, the data build tool — models, ref() and the DAG, tests, version control and CI. Raw Northwind to a mart a team can maintain.

No lessons published yet — this is the roadmap, so you can see exactly what the course will cover before it lands.

Before you start: Learn SQL — Series 2. A dbt model IS a SELECT. CTEs especially — the staging/marts split is CTEs promoted to files, and Series 2 is where you learn to read one.

Before you start: ETL & Data Pipelines — Series 1. dbt does the T and neither the E nor the L. Series 1 there teaches the extract and load that come before it. You can start here without it: this course installs its own raw copy of Northwind Co to transform.

Short on time? The 27 episodes marked core are the shortest path to being productive at work. Start there and pick up the rest whenever a job asks for them.


Series 1 · dbt Fundamentals

turn SQL files into a project dbt builds in the right order

  1. 01

    What dbt Is and Is Not — The T in ELT, as a Real Project

    corebeginnercoming soon
  2. 02

    Your First Model — A SELECT That Becomes a View (stg_orders)

    corebeginnercoming soon
  3. 03

    dbt run, build & compile — The Everyday Loop

    corebeginnercoming soon
  4. 04

    Project Anatomy — profiles.yml, dbt_project.yml and the models Folder

    corebeginnercoming soon
  5. 05

    ref() & source() — How dbt Works Out What to Build First

    corebeginnercoming soon
  6. 06

    Materializations — view, table, ephemeral, and When Each Wins

    corebeginnercoming soon
  7. 07

    The Staging Layer — Clean Raw Northwind Once, Reuse It Everywhere

    corebeginnercoming soon
  8. 08

    Marts — Build dim_customer and fct_sales on Top of Staging

    corebeginnercoming soon
  9. 09

    Seeds — Version-Controlled CSV Reference Data

    beginnercoming soon
  10. 10

    Generated Docs & Lineage — The Northwind DAG, Drawn For You

    beginnercoming soon
  11. 11

    The Project in Git — What Belongs in the Repo, and What Must Never

    corebeginnercoming soon
  12. 12

    Project — Raw Northwind to a Mart You Can Query

    corebeginner#projectcoming soon

Series 2 · Trustworthy dbt

tests that catch a bad load, and a structure that survives

  1. 01

    Built-in Tests — not_null, unique, relationships, accepted_values

    coreintermediatecoming soon
  2. 02

    Singular & Custom Tests — Assert the Business Rule, Not Just the Column

    coreintermediatecoming soon
  3. 03

    Sources & Freshness — Declare Raw Tables and Catch a Stale Feed

    coreintermediatecoming soon
  4. 04

    Incremental Models — Build Only the New Orders

    coreintermediatecoming soon
  5. 05

    Snapshots — SCD Type 2 History Without Writing the Merge

    coreintermediatecoming soon
  6. 06

    Jinja & Variables — DRY SQL That's Still Readable

    coreintermediatecoming soon
  7. 07

    Macros & dbt_utils — Reusable SQL Logic

    intermediatecoming soon
  8. 08

    Descriptions & Contracts — Documentation People Actually Trust

    intermediatecoming soon
  9. 09

    Project Structure — staging / intermediate / marts, and Why the Split Holds

    coreintermediatecoming soon
  10. 10

    Refactoring a Query Pile — One 200-Line SELECT Into a Layered Model Set

    coreintermediatecoming soon
  11. 11

    Environments & Targets — dev vs prod, and Multiple Warehouses

    coreintermediatecoming soon
  12. 12

    Project — A Model Set Whose Tests Catch a Bad Load

    coreintermediate#projectcoming soon

Series 3 · Analytics Engineering at Scale

move the project to ClickHouse, and work on it as a team

  1. 01

    Moving to a Columnar Engine — The Same dbt Project, Pointed at ClickHouse

    coreadvancedcoming soon
  2. 02

    Materializations on ClickHouse — MergeTree Tables and the View That Is Not Free

    advancedcoming soon
  3. 03

    Incremental Without UPDATE — Replacing a Partition Instead of Editing Rows

    coreadvancedcoming soon
  4. 04

    History Without Snapshots — ReplacingMergeTree, FINAL and What Deduplication Costs

    advancedcoming soon
  5. 05

    Testing a Big Table — Why unique Stops Being Free, and What to Assert Instead

    advancedcoming soon
  6. 06

    Packages — Reuse Community Code (dbt_utils, codegen)

    advancedcoming soon
  7. 07

    The Semantic Layer & Metrics — One Definition of Revenue, in Code

    coreadvancedcoming soon
  8. 08

    Exposures — Lineage All the Way to the Dashboard

    advancedcoming soon
  9. 09

    Testing Strategy — Unit Tests, Contracts and Quality at Scale

    coreadvancedcoming soon
  10. 10

    Reviewing a Model Change — Reading a Diff That Moves a Number

    coreadvancedcoming soon
  11. 11

    CI/CD for dbt — Slim CI, State Comparison and dbt build in a Pipeline

    coreadvancedcoming soon
  12. 12

    dbt Mesh & Multi-Project — When One Repo Stops Scaling

    advancedcoming soon
  13. 13

    Project — A Production Northwind Project: Staging → Marts → Metrics

    coreadvanced#projectcoming soon

Not here, on purpose

  • Extract and Load — dbt does neither — covered in ETL & Data Pipelines; dbt starts once the raw data has landed
  • The warehouse engine itself — MergeTree internals, partitions, sort keys, storage, tuning — covered in Data Warehousing, Series 2, for MergeTree, partitions and sort keys. In this course, Series 3 runs dbt ON that engine — what the adapter can and cannot express, which is a different subject
  • Dimensional design decisions — grain, SCD type, star vs snowflake — covered in Data Modeling; here you implement the model you already chose
  • Writing the SQL inside a model — covered in Learn SQL — a dbt model is a SELECT, and this track is the project around it
  • Agreeing with the business what a metric MEANS, and governing it — covered in BI & Data Visualization, Series 2, which is where the business agrees what a metric means. In this course, Series 3 · 30 expresses that agreed definition as code
  • Dashboards themselves — covered in BI & Data Visualization — exposures here only record that a dashboard depends on a model