Раздел 26 · Data Engineering

Лучшие практики и реальный пример витрин

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Месяц назад у Отто было три разных числа «выручки за неделю» от трёх отделов. Сейчас у «Гонца» есть проект dbt: сырые таблицы, которые ночью загружает Airflow, слои моделей, тесты, норматив из сида и витрина mart_zone_daily, из которой читает дашборд. Через полгода в проекте будет сто моделей и пять авторов. Останется ли он понятным, решают не инструменты, а договорённости. Соберём их в одном месте на примере всего проекта.

Библиотека

В хорошей библиотеке книгу находишь за минуту, даже если пришёл впервые: отделы подписаны, внутри отдела книги по алфавиту, на каждой карточка. Никто не ставит детектив в отдел учебников, потому что «так было удобно».

Проект dbt это библиотека для данных. Соглашения о папках и именах работают как подписи на полках: новый человек открывает проект и сразу понимает, где сырое, где очищенное, а где витрина для дашборда.

Структура проекта

Весь проект «Гонца» выглядит так:

gonets/
  dbt_project.yml
  packages.yml
  seeds/
    zone_targets.csv
  models/
    staging/
      _sources.yml
      _schema.yml
      stg_orders.sql
      stg_couriers.sql
      stg_zones.sql
    intermediate/
      int_deliveries.sql
    marts/
      _schema.yml
      fct_deliveries.sql
      dim_couriers.sql
      dim_zones.sql
      mart_zone_daily.sql

Каждая папка отвечает на свой вопрос, как в уроке про слои:

  • staging чистит одну сырую таблицу: переименовывает колонки, приводит типы и пояса. Одна модель на один источник;
  • intermediate собирает промежуточные шаги, которые нужны нескольким витринам, например определение чистой доставки;
  • marts отдаёт таблицы потребителям: факты, измерения и готовые витрины.

Имена

Префикс в имени модели говорит, из какого она слоя, ещё до того как ты открыл файл:

ПрефиксСлойПример
stg_staging, одна таблица источникаstg_orders
int_промежуточная модельint_deliveries
fct_факт, по строке на событиеfct_deliveries
dim_измерение, по строке на объектdim_zones
mart_витрина под конкретного потребителяmart_zone_daily

Колонки тоже по правилам: ключ называется <объект>_id (order_id, а не id), флаги начинаются с is_ (is_late), даты заканчиваются на _at или _date. YAML со свойствами лежит рядом с моделями и начинается с подчёркивания, чтобы стоять в начале списка файлов.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.