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

Определение конфигураций

Узнайте, как определять конфигурации для ваших ресурсов в 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:

models/jaffle_shop.yml
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

Полный список всех поддерживаемых свойств и конфигураций, разбитый по типам ресурсов, можно найти здесь:

Часто задаваемые вопросы (FAQ)​

Нужно ли называть мой файл `.yml`, содержащий тесты и описания, `schema.yml`?
Если я могу называть эти файлы как угодно, как мне их назвать?
Следует ли использовать отдельные файлы для объявления свойств ресурсов или один большой файл?
Можно ли добавлять тесты и описания в SQL config-блоке?
Почему файлы YAML для моделей и источников всегда начинаются с `version: 2`?
Могу ли я использовать расширение файла YAML?

Устранение распространённых ошибок​

 Invalid test config given in [model name]

Эта ошибка возникает, когда ваш файл .yml не соответствует структуре, ожидаемой dbt. Полное сообщение об ошибке может выглядеть так:

* Invalid test config given in models/schema.yml near {'namee': 'event', ...}
Invalid arguments passed to "UnparsedNodeUpdate" instance: 'name' is a required property, Additional properties are not allowed ('namee' was unexpected)

Хотя сообщение достаточно подробное, оно должно помочь определить источник проблемы. В данном случае поле name было по ошибке указано как namee. Чтобы исправить эту ошибку, убедитесь, что ваш .yml файл соответствует ожидаемой структуре, описанной в этом руководстве.

 Invalid syntax in your schema.yml file

Если ваш файл .yml не является корректным YAML, dbt покажет ошибку вида:

Runtime Error
Syntax error near line 6
------------------------------
5 | - name: events
6 | description; "A table containing clickstream events from the marketing website"
7 |

Raw Error:
------------------------------
while scanning a simple key
in "<unicode string>", line 6, column 5:
description; "A table containing clickstream events from the marketing website"
^

Эта ошибка произошла из-за того, что после поля description по ошибке была использована точка с запятой (;) вместо двоеточия (:). Чтобы устранить подобные проблемы, найдите файл .yml, указанный в сообщении об ошибке, и исправьте все синтаксические ошибки в этом файле. В этом могут помочь онлайн-валидаторы YAML, однако будьте осторожны и не отправляйте конфиденциальную информацию в сторонние сервисы!

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

0
Loading