Месяц назад у Отто было три разных числа «выручки за неделю» от трёх отделов. Сейчас у «Гонца» есть проект 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 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.