В прошлом уроке модели «Гонца» начали ссылаться друг на друга через ref(), и dbt сам выстроил порядок сборки. Но у графа остался слепой край. Staging-модели читают raw.orders и raw.couriers прямо по имени, и dbt не знает, что под ними лежат таблицы, которые каждую ночь загружает DAG gonets_daily. Если дата-инженер переименует схему raw в landing, придётся искать её по всем моделям. А Отто однажды спросит: «на каких сырых данных стоит мой дашборд?». Ответить по графу пока не получится.
Склад и накладные
В ресторан каждое утро приезжает поставщик: мука, овощи, мясо. Повара не бегают на склад с вопросом «а где у нас лежит картошка». На складе висит список: что поставляется, от кого и на какой полке лежит. Технологическая карта ссылается на позицию из списка: «картофель со склада». Переехал склад на другой этаж, поправили одну строку в списке, а карты остались как были.
В dbt такой список называется источниками.
Источники в YAML
Источник это таблица, которую dbt не создаёт, а только читает. Источники объявляют в YAML-файле рядом с моделями. В проекте «Гонца» это models/staging/_sources.yml:
version: 2
sources:
- name: raw
description: Сырые таблицы, которые каждую ночь загружает DAG gonets_daily.
schema: raw
tables:
- name: orders
- name: couriers
- name: zones
name это имя источника, под которым к нему обращаются модели. schema это схема, в которой таблицы лежат в базе. Если её не указать, dbt возьмёт схему с тем же именем, что и источник. tables перечисляет таблицы. Подчёркивание в начале имени файла это просто соглашение: служебные YAML-файлы стоят в папке первыми.
Имя файла dbt не важно. Он читает все .yml в папке models/ и находит в них ключ sources.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.