Перейти к основному содержимому

Конфигурации и свойства: в чём разница?

Разберитесь в разнице между свойствами и конфигурациями в 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 к ресурсу

Нашли ошибку?

0