Определения источников для state:modified
Этот флаг удалён в v2. Новое поведение включено всегда. При обновлении удалите этот флаг из dbt_project.yml.
| state_modified_compare_more_unrendered_values | dbt v1 Latest | dbt v1 |
|---|---|---|
| Добавлен | 2024.10 | 1.9.0 |
Стабилизирован (по умолчанию → true) | 2026.09 | 1.12.0 |
| Удалён | — | v2.0 |
Необходимо создать каталог состояния с помощью dbt v1.9 или выше либо dbt на канале обновлений v1 Latest, а также установить state_modified_compare_more_unrendered_values в значение true в файле dbt_project.yml.
Если каталог состояния был создан с использованием более старой версии dbt или если флаг изменения поведения state_modified_compare_more_unrendered_values не был установлен или был установлен в значение false, вам необходимо пересоздать каталог состояния, чтобы избежать ложных срабатываний при сравнении состояния с state:modified.
В dbt v1.12 флаг state_modified_compare_more_unrendered_values по умолчанию имеет значение true, что сокращает число ложных срабатываний при проверках state:modified, особенно когда конфигурации различаются в зависимости от целевого окружения (например, prod и dev).
Флаг переключает сравнение state:modified с отрендеренных значений на значения до рендеринга: для этого при разборе моделей сохраняется unrendered_config, а при разборе источников — параметры конфигурации unrendered_database и unrendered_schema.
Чтобы этот флаг подействовал, необходимо заново создать каталог состояния (манифест).
Влияние
Этот флаг без уведомления меняет набор ресурсов, выбираемых с помощью state:modified, на который опирается большинство рабочих процессов CI, Slim CI и dbt build --defer. Это проявляется двумя способами:
- Ложное определение ресурсов как изменённых при первом запуске после установки флага в
true. Если базовый манифест был создан до установки флага (сохранены отрендеренные значения), а текущий разбор выполняется после изменения настройки (сохраняется исходный текст), каждый узел, в YAML-конфигурации которого есть Jinja, будет определён какstate:modified, даже если ничего не изменилось. Это приводит к полной пересборке при первом запуске CI после обновления. - Выявление дополнительных изменений в дальнейшем. После того как оба манифеста будут созданы с включённым флагом,
state:modifiedбудет выявлять случаи, когда два эквивалентных выражения Jinja дают одинаковое значение при рендеринге (например, при переходе с"{{ env_var('MAT', 'view') }}"наview).