Раздел 26 · Data Engineering

source(): объявляем сырые таблицы

junior~15 мин

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

В прошлом уроке модели «Гонца» начали ссылаться друг на друга через 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 ₽.

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