🧬 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
- 01
What dbt Is and Is Not — The T in ELT, as a Real Project
corebeginnercoming soon - 02
Your First Model — A SELECT That Becomes a View (stg_orders)
corebeginnercoming soon - 03
dbt run, build & compile — The Everyday Loop
corebeginnercoming soon - 04
Project Anatomy — profiles.yml, dbt_project.yml and the models Folder
corebeginnercoming soon - 05
ref() & source() — How dbt Works Out What to Build First
corebeginnercoming soon - 06
Materializations — view, table, ephemeral, and When Each Wins
corebeginnercoming soon - 07
The Staging Layer — Clean Raw Northwind Once, Reuse It Everywhere
corebeginnercoming soon - 08
Marts — Build dim_customer and fct_sales on Top of Staging
corebeginnercoming soon - 09
Seeds — Version-Controlled CSV Reference Data
beginnercoming soon - 10
Generated Docs & Lineage — The Northwind DAG, Drawn For You
beginnercoming soon - 11
The Project in Git — What Belongs in the Repo, and What Must Never
corebeginnercoming soon - 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
- 01
Built-in Tests — not_null, unique, relationships, accepted_values
coreintermediatecoming soon - 02
Singular & Custom Tests — Assert the Business Rule, Not Just the Column
coreintermediatecoming soon - 03
Sources & Freshness — Declare Raw Tables and Catch a Stale Feed
coreintermediatecoming soon - 04
Incremental Models — Build Only the New Orders
coreintermediatecoming soon - 05
Snapshots — SCD Type 2 History Without Writing the Merge
coreintermediatecoming soon - 06
Jinja & Variables — DRY SQL That's Still Readable
coreintermediatecoming soon - 07
Macros & dbt_utils — Reusable SQL Logic
intermediatecoming soon - 08
Descriptions & Contracts — Documentation People Actually Trust
intermediatecoming soon - 09
Project Structure — staging / intermediate / marts, and Why the Split Holds
coreintermediatecoming soon - 10
Refactoring a Query Pile — One 200-Line SELECT Into a Layered Model Set
coreintermediatecoming soon - 11
Environments & Targets — dev vs prod, and Multiple Warehouses
coreintermediatecoming soon - 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
- 01
Moving to a Columnar Engine — The Same dbt Project, Pointed at ClickHouse
coreadvancedcoming soon - 02
Materializations on ClickHouse — MergeTree Tables and the View That Is Not Free
advancedcoming soon - 03
Incremental Without UPDATE — Replacing a Partition Instead of Editing Rows
coreadvancedcoming soon - 04
History Without Snapshots — ReplacingMergeTree, FINAL and What Deduplication Costs
advancedcoming soon - 05
Testing a Big Table — Why unique Stops Being Free, and What to Assert Instead
advancedcoming soon - 06
Packages — Reuse Community Code (dbt_utils, codegen)
advancedcoming soon - 07
The Semantic Layer & Metrics — One Definition of Revenue, in Code
coreadvancedcoming soon - 08
Exposures — Lineage All the Way to the Dashboard
advancedcoming soon - 09
Testing Strategy — Unit Tests, Contracts and Quality at Scale
coreadvancedcoming soon - 10
Reviewing a Model Change — Reading a Diff That Moves a Number
coreadvancedcoming soon - 11
CI/CD for dbt — Slim CI, State Comparison and dbt build in a Pipeline
coreadvancedcoming soon - 12
dbt Mesh & Multi-Project — When One Repo Stops Scaling
advancedcoming soon - 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