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

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

<br />

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

Раньше dbt не требовал использовать стандартный набор значений для поля [`type`](https://docs.getdbt.tech/reference/resource-properties/arguments.md#type) у аргументов макросов в YAML. Поэтому поле `type` использовалось только для документации, и dbt не проверял, что:

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

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

macros/filename.yml

```yaml
macros:
  - name: <macro name>
    arguments:
      - name: <arg name>
        type: <string>
```

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

* Проверяет аргументы макросов при разборе проекта.
* Проверяет, что все имена аргументов в YAML совпадают с именами в определении макроса.
* Выдаёт предупреждения, если имена или типы не совпадают.
* Проверяет, что [значения `type` соответствуют поддерживаемому формату](https://docs.getdbt.tech/reference/resource-properties/arguments.md#supported-types).
* Если в YAML не задокументированы аргументы, определяет их по макросу и включает в [файл `manifest.json`](https://docs.getdbt.tech/reference/artifacts/manifest-json.md).

 Когда выполняется валидация?

Валидация аргументов макросов выполняется при разборе проекта, а не при выполнении макросов. Любая команда 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

```yaml
flags:
  warn_error_options:
    silence:
      - InvalidMacroAnnotation
```

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

dbt\_project.yml

```yaml
flags:
  validate_macro_args: false
```
