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

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

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