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

Валидация аргументов макросов

| validate_macro_args | dbt v1 Latest | dbt v1 | |---|---|---|---| | Добавлен | 2025.03 | 1.10.0 | | Стабилизирован (по умолчанию → true) | 2026.09 | 1.12.0 | | Удалён | — | — |


dbt проверяет аргументы макросов с помощью флага validate_macro_args. Начиная с dbt v1.12, значение этого флага по умолчанию — true.

Раньше dbt не требовал использовать стандартный набор значений для поля type у аргументов макросов в YAML. Поэтому поле type использовалось только для документации, и dbt не проверял, что:

  • имена аргументов совпадают с именами в макросе
  • типы аргументов допустимы и соответствуют определению макроса на Jinja

Ниже приведён пример документированного макроса:

macros/filename.yml
macros:
- name: <macro name>
arguments:
- name: <arg name>
type: <string>

Когда этот флаг включён (по умолчанию), dbt:

  • Проверяет аргументы макросов при разборе проекта.
  • Проверяет, что все имена аргументов в YAML совпадают с именами в определении макроса.
  • Выдаёт предупреждения, если имена или типы не совпадают.
  • Проверяет, что значения type соответствуют поддерживаемому формату.
  • Если в YAML не задокументированы аргументы, определяет их по макросу и включает в файл manifest.json.
 Когда выполняется валидация?

Валидация аргументов макросов выполняется при разборе проекта, а не при выполнении макросов. Любая команда dbt, которая разбирает проект, запускает валидацию.

  • В dbt v1:
    • Валидация выполняется в рамках разбора для большинства команд (parse, build, run, test, seed, snapshot, compile).
    • При полном разборе dbt проверяет все макросы.
    • При частичном разборе (по умолчанию) dbt проверяет только макросы, затронутые изменёнными файлами.
    • Используйте --no-partial-parse, чтобы принудительно проверить все макросы.

Влияние​

Сам по себе этот флаг приводит лишь к выдаче предупреждений, и сборки продолжаются. Однако эти предупреждения проходят через механизм принудительной обработки и учитывают --warn-error, поэтому в проектах с установленным --warn-error сборки будут завершаться с ошибкой на этапе разбора.

Это затрагивает проекты, в которых аргументы arguments:, перечисленные в YAML-описании макроса, больше не соответствуют фактической сигнатуре макроса на Jinja. В таких проектах каждая команда завершается с ошибкой на этапе разбора, пока вы не обновите аргументы в YAML в соответствии с макросом или не удалите блок arguments: целиком.

 Рекомендуемые действия

Если на этапе разбора появляются предупреждения InvalidMacroAnnotation (или они приводят к ошибкам разбора при установленном --warn-error), проверьте каждую строку журнала — в ней указаны макрос и конкретное несоответствие. В YAML-блоке macros: для каждого затронутого макроса приведите записи arguments: в соответствие с объявлением {% macro name(args) %} в файле .sql или удалите блок arguments: целиком.

Чтобы отключить предупреждения, не исправляя YAML, используйте warn_error_options:

dbt_project.yml
flags:
warn_error_options:
silence:
- InvalidMacroAnnotation

Чтобы отключить это поведение, установите для флага значение false:

dbt_project.yml
flags:
validate_macro_args: false

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

0
Loading