Отто хочет видеть на дашборде не только долю опозданий по зонам, но и норматив: в Центре допустимо 20%, в новом Академическом 35%. Ни в одной системе «Гонца» нормативов нет. Они живут в табличке у Отто на компьютере и меняются раз в квартал на планёрке. Тащить ради двенадцати строк отдельную загрузку в Airflow странно, а вписывать числа прямо в SQL модели неудобно: их будет править Отто, а не ты.
Расписание на двери
На двери кабинета врача висит листок с часами приёма. Его не хранят в больничной базе: он короткий, меняется редко, а поменять его может любой, кто работает в кабинете. При этом все пациенты смотрят на один и тот же листок.
Сид в dbt это такой листок: маленькая таблица в файле CSV прямо в репозитории проекта.
Сид это CSV, который dbt загружает в базу
Сид это CSV-файл в папке seeds/. Первая строка это имена колонок, дальше данные:
zone_id,target_late_pct
1,20
2,25
...
7,35
12,35
Команда dbt seed загружает каждый такой файл в базу таблицей с именем файла: seeds/zone_targets.csv становится dbt_dev.zone_targets. Схема берётся из профиля, как у моделей.
Из моделей на сид ссылаются через ref(), как на любую модель:
-- models/marts/dim_zones.sql
select
z.zone_id,
z.zone_name,
z.opened_on,
t.target_late_pct
from {{ ref('stg_zones') }} as z
left join {{ ref('zone_targets') }} as t on t.zone_id = z.zone_id
Раз есть ref(), сид попадает в граф. dbt build загрузит его раньше dim_zones, а dbt ls -s zone_targets+ покажет всех, кто от него зависит.
Типы колонок
В CSV нет типов, только текст. dbt угадывает их сам по значениям: целые числа становятся integer, дробные double precision, true и false становятся boolean, даты вида 2026-04-15 типом date, остальное text. Пустая ячейка превращается в null.
Угадывание иногда ошибается. Код зоны 007 станет числом 7, а номер телефона потеряет плюс. Тогда тип задают явно в dbt_project.yml:
seeds:
gonets:
zone_targets:
+column_types:
target_late_pct: numeric(4,1)
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.