Определение конфигураций
Узнайте, как определять конфигурации для ваших ресурсов в dbt‑проекте
В зависимости от типа ресурса вы можете задавать конфигурации в dbt‑проекте, а также в установленном пакете, следующими способами:
Наследование конфигураций
Наиболее специфичная конфигурация всегда имеет приоритет. В общем случае это следует порядку, указанному выше: блок config() внутри файла → свойства, определённые в .yml файле → конфигурация, заданная в проектном файле.
Примечание: обобщённые data tests работают немного иначе с точки зрения специфичности. Подробнее см. test configs.
Внутри проектного файла конфигурации также применяются иерархически. Наиболее специфичная конфигурация всегда имеет приоритет. Например, конфигурации, применённые к поддиректории marketing, будут иметь приоритет над конфигурациями, применёнными ко всему проекту jaffle_shop. Чтобы применить конфигурацию к модели или директории моделей, определите resource path в виде вложенных ключей словаря.
Конфигурации в корневом dbt‑проекте имеют более высокий приоритет, чем конфигурации в установленных пакетах. Это позволяет переопределять настройки установленных пакетов и даёт больше контроля над выполнением dbt.
Комбинирование конфигураций
Большинство конфигураций при иерархическом применении «перезаписываются» (clobbered). Если доступно более специфичное значение, оно полностью заменяет менее специфичное. Однако некоторые конфигурации имеют иное поведение при объединении:
tagsявляются аддитивными. Если для модели заданы теги вdbt_project.yml, а дополнительные теги указаны в её.sqlфайле, итоговый набор тегов будет включать их все.- Словари
metaобъединяются (более специфичная пара ключ‑значение заменяет менее специфичное значение с тем же ключом). - При использовании конфигурации
freshnessболее специфичная пара ключ‑значение заменяет менее специфичное значение с тем же ключом. pre-hookиpost-hookтакже являются аддитивными.- Для перезаписываемых и объединяемых конфигураций, наследуемых с нескольких уровней, действуют общие правила:
- Конфигурации на уровне ноды (более специфичные) перезаписывают конфигурации на уровне проекта (менее специфичные).
- Для sources конфигурации на уровне таблицы (более специфичные) перезаписывают конфигурации на уровне source (менее специфичные).
- Конфигурация корневого проекта в
dbt_project.ymlперезаписывает конфигурации в файлах пакетов. Это сделано для того, чтобы пользователи могли управлять поведением пакетов, устанавливаемых черезdbt deps, без необходимости напрямую редактировать код этих пакетов.
Префикс +
dbt различает имя папки и конфигурацию, используя префикс + перед именем конфигурации. Префикс + используется только для конфигураций и применяется в файле dbt_project.yml в рамках соответствующего ключа ресурса. Он не применяется к:
- Jinja-макросу
config()внутри файла ресурса - свойству
configв файле.yml
Подробнее см. в разделе Using the + prefix.
Пример
Ниже приведён пример, в котором для проекта определены и sources, и models:
version: 2
sources:
- name: raw_jaffle_shop
description: A replica of the postgres database used to power the jaffle_shop app.
tables:
- name: customers
columns:
- name: id
description: Primary key of the table
data_tests:
- unique
- not_null
- name: orders
columns:
- name: id
description: Primary key of the table
data_tests:
- unique
- not_null
- name: user_id
description: Foreign key to customers
- name: status
data_tests:
- accepted_values:
arguments: # available in v1.10.5 and higher. Older versions can set the <argument_name> as the top-level property.
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
models:
- name: stg_jaffle_shop__customers # Must match the filename of a model -- including case sensitivity.
config:
tags: ['pii']
columns:
- name: customer_id
data_tests:
- unique
- not_null
- name: stg_jaffle_shop__orders
config:
materialized: view
columns:
- name: order_id
data_tests:
- unique
- not_null
- name: status
data_tests:
- accepted_values:
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
config:
severity: warn
Связанная документация
Полный список всех поддерживаемых свойств и конфигураций, разбитый по типам ресурсов, можно найти здесь:
- Модели: properties и configs
- Источники: properties и configs
- Seed-данные: properties и configs
- Снимки (snapshots): properties
- Анализы: properties
- Макросы: properties
- Экспозиции (exposures): properties