Раздел 26 · Data Engineering

Слои модели: staging, intermediate и marts

junior~15 мин

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

В проекте «Гонца» с десяток моделей: представления, таблицы, эфемерные шаги, инкрементальная витрина. И начались неприятности. Финансы прислали отчёт, где опаздывает 1% доставок, а у Отто на дашборде 27%. Оказалось, финансист написал свою модель прямо по сырым таблицам и сравнил время доставки в UTC с обещанным местным временем. Правило «что считать опозданием» живёт в двух местах, и в одном оно неверное. Пора договориться, какая модель за что отвечает.

Кухня ресторана

На кухне ресторана три зоны. Заготовочный цех моет и чистит продукты, которые привёз поставщик: картошку от земли, рыбу от чешуи. Он ничего не придумывает, только приводит сырьё в порядок, и каждую позицию со склада чистит один раз. Горячий цех из заготовок делает полуфабрикаты: обжаренный лук, соус, отварной рис. Раздача собирает из полуфабрикатов блюда, которые уходят в зал.

Повар раздачи не чистит картошку сам, он берёт её из заготовочного цеха. Иначе каждое блюдо чистило бы картошку по-своему.

Три слоя dbt

В dbt-проектах модели так же делят на слои. Каждый слой лежит в своей папке внутри models/, а имя модели начинается с приставки слоя.

staging, приставка stg_. Staging-модели это заготовочный цех. Одна модель на одну сырую таблицу: переименовать id в order_id, привести типы, перевести время в нужный пояс. Никаких соединений с другими таблицами и никаких метрик. Только staging читает источники через source(), все остальные модели берут staging через ref(). У «Гонца» stg_orders переводит время приложения курьера из UTC в местное, и больше никто в проекте об этом не думает.

intermediate, приставка int_. Промежуточные модели это горячий цех. Здесь соединяют таблицы, отбирают нужные строки и считают то, что понадобится нескольким витринам. У «Гонца» int_deliveries оставляет только чистые доставки, без 24 заказов, где доставка случилась раньше, чем курьер забрал заказ, и считает опоздание в минутах. Снаружи этот слой обычно не читают, поэтому в проекте он эфемерный.

marts, витрины. Витрины это раздача. Их читают дашборды и люди. Здесь живут факты с приставкой fct_ и измерения с приставкой dim_. Это та самая схема звезды из урока про моделирование: fct_deliveries с одной строкой на доставку и dim_couriers с одной строкой на курьера.

урок из курса

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

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