Конфигурации и свойства: в чём разница?
Разберитесь в разнице между свойствами и конфигурациями в dbt: свойства описывают ресурсы, а конфигурации управляют тем, как dbt создаёт их в хранилище данных.
Ресурсы в вашем проекте — модели, снимки (snapshots), сиды (seeds), тесты и другие — могут иметь ряд объявленных свойств (properties). Ресурсы также могут определять конфигурации (configurations, или configs) — это особый вид свойств, который даёт дополнительные возможности. В чём же различие?
- Свойства объявляются для ресурсов по отдельности в файлах
properties.yml. Конфигурации можно задавать там же, вкладывая их в свойствоconfig. Кроме того, их можно указывать по одной через макросconfig()(непосредственно в.sqlфайлах), а также для множества ресурсов сразу — вdbt_project.yml. - Поскольку конфигурации могут задаваться в нескольких местах, они применяются иерархически. Отдельный ресурс может наследовать или переопределять конфигурации, заданные в других местах.
- Вы можете выбирать ресурсы на основе значений их конфигураций, используя метод выбора
config:, но не на основе значений обычных (не‑config) свойств. - Для свойств и конфигураций используются немного разные соглашения об именовании в зависимости от типа файла. Подробнее см. в разделе naming convention.
Правило большого пальца: свойства объявляют вещи о ресурсах вашего проекта; конфигурации делают дополнительный шаг, указывая dbt как строить эти ресурсы в вашем хранилище. Это в целом верно, но не всегда, поэтому всегда полезно проверять!
Например, вы можете использовать properties ресурса, чтобы:
- Описывать модели, снапшоты, seed-файлы и их колонки
- Задавать «истины» о модели в виде data tests, например: «эта колонка
idуникальна» - Определять официальные downstream‑использования ваших моделей данных в виде exposures и указывать «тип» exposure
В то же время configurations можно использовать, чтобы:
- Изменять способ материализации модели (table, view, incremental и т.д.)
- Указывать, где seed будет создан в базе данных (
<database>.<schema>.<alias>) - Определять, должен ли ресурс сохранять свои описания в виде комментариев в базе данных
- Применять теги и meta к ресурсу