19 модулей за спиной. Ты прошёл базовые концепции (модели, ref, materializations), тесты, Jinja, project structure, debugging, и git workflow. По отдельности всё это казалось серией концепций. В capstone время сложить всё в одно — построить полноценный dbt-проект с нуля.
Никакого нового материала больше не будет. Только задачи и шаги.
Что строим: Jaffle Shop
Jaffle Shop — это классический учебный проект dbt Labs. Канонический пример «маленький e-commerce с заказами и платежами», на котором можно показать всю пирамиду dbt: от raw CSV до бизнес-метрик в marts.
После этого capstone у тебя будет работающий dbt-проект уровня production minimum — то, что можно показать на собеседовании как «вот что я умею».
Поток данных снизу вверх: raw CSV -> staging -> intermediate -> marts. Слева снэпшоты, справа exposures.
Что в итоге будет
После capstone в твоём проекте:
- 6 raw CSV в
seeds/(customers, orders, order_items, payments, products_catalog, country_codes) - 4 staging-модели — нормализованная очистка raw
- 2 intermediate-модели — pivot и join’ы
- 3 mart-модели — бизнес-сущности (customers как dim, orders как fact, revenue_daily агрегат)
- 15-20 тестов — 4 generic на каждой PK + relationships + accepted_values + 3 singular для бизнес-логики
- 1 snapshot — customers_snapshot для отслеживания изменений
- 1 exposure — monthly_revenue_dashboard как декларация downstream использования
- Полная документация — descriptions для всех моделей и нетривиальных колонок
- Сгенерированный каталог —
dbt docs generate+dbt docs serve
Это — реальный production-минимум, который можно расширять, на основе которого можно собирать собеседование.
План работы
Capstone разбит на 4 урока (включая этот):
- Этот урок (overview) — план, что будем делать, как сдавать
- Staging и marts — пошаговая сборка raw -> staging -> intermediate -> marts с тестами
- Snapshots и docs — добавление snapshot, descriptions, doc blocks, exposures
- Finalize и checklist — финальный build, docs generate, чек-лист для самопроверки
Каждый урок — это пошаговая инструкция. К концу 4-го у тебя готовый проект.
Время на работу
Реалистичная оценка:
- Setup и seeds — 30 минут (создать проект, configure profiles, загрузить CSV)
- Staging-слой — 1 час (4 модели + тесты)
- Intermediate-слой — 30 минут (2 модели)
- Marts — 1.5 часа (3 модели + бизнес-тесты)
- Snapshot — 30 минут (один snapshot + конфиг)
- Documentation — 1 час (descriptions, doc blocks)
- Finalize — 30 минут (build, docs generate, проверка)
Итого: 5.5 часов фокусированной работы.
С перерывами, дебагом, отвлечениями — растягивается на 8-12 часов в реальности.
Распределяй на 2-3 дня по 3-4 часа. Не пытайся сделать за один присест — устанешь, накосячишь.
Что нужно иметь готовое
Перед началом убедись:
- Python 3.10+ установлен
- dbt-core 1.10 и dbt-duckdb 1.10 в venv:
python -m venv .venv source .venv/bin/activate pip install dbt-duckdb==1.10.1 dbt --version - DuckDB CLI установлен (полезно для ручной проверки):
brew install duckdbилиapt install duckdb. - Текстовый редактор с YAML/SQL подсветкой — VS Code, DataGrip, любой подходящий.
- Git репозиторий — создай новый репо для проекта.
Если что-то из этого не настроено — возвращайся к модулю 3 (Setup).
Где взять данные
Synthetic CSV для Jaffle Shop:
- Используй данные из официального jaffle_shop репо: github.com/dbt-labs/jaffle_shop
- Или сгенерируй сам через
jafgenCLI:pip install jafgen jafgen 1 # 1 год данных # CSV появятся в jaffle-data/
В нашем capstone мы используем уже синтезированные данные — они достаточно богаты для всех уроков.
Структура итогового проекта
my_jaffle_shop/
├── dbt_project.yml
├── packages.yml
├── package-lock.yml
├── .gitignore
├── README.md
├── models/
│ ├── staging/
│ │ ├── _sources.yml
│ │ ├── _models.yml
│ │ ├── stg_jaffle__customers.sql
│ │ ├── stg_jaffle__orders.sql
│ │ ├── stg_jaffle__order_items.sql
│ │ └── stg_jaffle__payments.sql
│ ├── intermediate/
│ │ ├── _models.yml
│ │ ├── int_order_items_pivoted.sql
│ │ └── int_payments_joined.sql
│ └── marts/
│ ├── _models.yml
│ ├── _exposures.yml
│ ├── customers.sql
│ ├── orders.sql
│ └── revenue_daily.sql
├── seeds/
│ ├── _seeds.yml
│ ├── raw_customers.csv
│ ├── raw_orders.csv
│ ├── raw_order_items.csv
│ ├── raw_payments.csv
│ ├── products_catalog.csv
│ └── country_codes.csv
├── snapshots/
│ └── customers_snapshot.sql
├── tests/
│ ├── revenue_daily_matches_orders.sql
│ └── orders_total_equals_payments_total.sql
└── macros/
└── (опционально кастомные макросы)
В сумме — около 25 файлов. На вид много, но это аккуратный production setup.
Как сдавать
Capstone — это самопроверка, не аттестация. Нет ревьюера, кто будет ставить оценку. Но есть чёткий чек-лист в уроке 04, по которому ты можешь оценить, всё ли сделал.
После завершения:
- Git-репозиторий твоего capstone-проекта.
- README.md с описанием проекта и инструкциями запуска.
- dbt docs generate + screenshots lineage из serve (или хостинг на GitHub Pages).
- Финальный
dbt buildзелёный — все 13 моделей + 15-20 тестов проходят.
Это становится твоим portfolio piece для собеседований. На GitHub его смотрят hiring manager’ы как «может ли junior сам поднять dbt-проект».
Подсказки
Несколько практических советов:
-
Делай в новом git-репо, не в учебном курсовом проекте. Так у тебя будет чистая история.
-
Каждую модель проверяй сразу — пиши SQL ->
dbt run --select <model>-> проверь в DuckDB shell, что таблица выглядит правильно. Не оставляй на «потом проверю всё». -
Тесты ПОСЛЕ каждой новой модели — добавь модель -> добавь тесты в YAML ->
dbt test --select <model>. Это формирует привычку «не пишу без тестов». -
Description пиши когда пишешь SQL — в голове сейчас вся бизнес-логика. Через час забудешь, что значит
total_lifetime_value_cents. -
Commit’ы каждый шаг — не складывай 6 часов работы в один коммит. История полезна тебе через месяц.
-
Не копипасть слепо. Когда я даю SQL — попытайся написать сам, потом сравни. Так информация останется в голове.
-
Если зависнешь — открой dbt-core docs или гугли точную ошибку. Capstone — это упражнение в решении проблем, не в копировании.
Чек-лист
- Capstone — это финальный проект курса: 6 seeds + 4 staging + 2 intermediate + 3 marts + 1 snapshot + 1 exposure.
- 15-20 тестов: generic на PK + relationships + accepted_values + singular для бизнес-инвариантов.
- Реальное время: 8-12 часов, разбить на 2-3 дня.
- Setup: dbt-core 1.10, dbt-duckdb 1.10, DuckDB CLI, git репо.
- Данные: official Jaffle Shop CSV или jafgen synthetic data.
- Сдача: git-репо + README + docs generate + зелёный dbt build.
- Это portfolio piece для собеседований.
- Подсказки: проверяй каждую модель сразу, тесты после каждой модели, descriptions when fresh, commits per step.
В следующем уроке — пошаговая инструкция по сборке staging и marts слоёв. Готовь venv, открой редактор, погнали.