Learning Platform
Глоссарий Troubleshooting
Урок 22.01 · 20 мин
Средний
CapstoneJaffle ShopEnd-to-endProject

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 — то, что можно показать на собеседовании как «вот что я умею».

Архитектура Jaffle Shop capstone

Поток данных снизу вверх: raw CSV -> staging -> intermediate -> marts. Слева снэпшоты, справа exposures.

Raw CSV (seeds)customers, orders, order_items, payments, products_catalog, country_codes
Staging (4 модели)stg_jaffle__customers, stg_jaffle__orders, stg_jaffle__order_items, stg_jaffle__payments
Intermediate (2 модели)int_order_items_pivoted, int_payments_joined
Marts (3 модели)customers (dim), orders (fact), revenue_daily
Snapshotcustomers_snapshot (SCD2)
Exposuremonthly_revenue_dashboard

Что в итоге будет

После 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 урока (включая этот):

  1. Этот урок (overview) — план, что будем делать, как сдавать
  2. Staging и marts — пошаговая сборка raw -> staging -> intermediate -> marts с тестами
  3. Snapshots и docs — добавление snapshot, descriptions, doc blocks, exposures
  4. 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
  • Или сгенерируй сам через jafgen CLI:
    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, по которому ты можешь оценить, всё ли сделал.

После завершения:

  1. Git-репозиторий твоего capstone-проекта.
  2. README.md с описанием проекта и инструкциями запуска.
  3. dbt docs generate + screenshots lineage из serve (или хостинг на GitHub Pages).
  4. Финальный dbt build зелёный — все 13 моделей + 15-20 тестов проходят.

Это становится твоим portfolio piece для собеседований. На GitHub его смотрят hiring manager’ы как «может ли junior сам поднять dbt-проект».

Подсказки

Несколько практических советов:

  1. Делай в новом git-репо, не в учебном курсовом проекте. Так у тебя будет чистая история.

  2. Каждую модель проверяй сразу — пиши SQL -> dbt run --select <model> -> проверь в DuckDB shell, что таблица выглядит правильно. Не оставляй на «потом проверю всё».

  3. Тесты ПОСЛЕ каждой новой модели — добавь модель -> добавь тесты в YAML -> dbt test --select <model>. Это формирует привычку «не пишу без тестов».

  4. Description пиши когда пишешь SQL — в голове сейчас вся бизнес-логика. Через час забудешь, что значит total_lifetime_value_cents.

  5. Commit’ы каждый шаг — не складывай 6 часов работы в один коммит. История полезна тебе через месяц.

  6. Не копипасть слепо. Когда я даю SQL — попытайся написать сам, потом сравни. Так информация останется в голове.

  7. Если зависнешь — открой 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.
Capstone dbt II: production-grade pipeline

В следующем уроке — пошаговая инструкция по сборке staging и marts слоёв. Готовь venv, открой редактор, погнали.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 6. Что входит в финальный capstone-проект Jaffle Shop?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4