diff --git a/website/docs/reference/node-selection/state-comparison-caveats.md b/website/docs/reference/node-selection/state-comparison-caveats.md index b0abde03aa..634bd92db0 100644 --- a/website/docs/reference/node-selection/state-comparison-caveats.md +++ b/website/docs/reference/node-selection/state-comparison-caveats.md @@ -16,7 +16,16 @@ dbt will mark modified any resource that depends on a changed macro, or on a mac ### Vars -If a model uses a `var` or `env_var` in its definition, dbt is unable today to identify that lineage in such a way that it can include the model in `state:modified` because the `var` or `env_var` value has changed. It's likely that the model will be marked modified if the change in variable results in a different configuration. + + +If a model uses a `var` or `env_var` in its definition, dbt Core 1.8 and earlier are unable today to identify that lineage in such a way that it can include the model in `state:modified` because the `var` or `env_var` value has changed. It's likely that the model will be marked modified if the change in variable results in a different configuration. + + + + +Beginning in dbt Core 1.9, when you set the `state_modified_compare_vars` [behavior flag](/reference/global-configs/behavior-changes#behavior-change-flags) to `True` and a model uses a `var` or `env_var` in its definition, dbt will identify that lineage in such a way that it will include the model in `state:modified` when the `var` or `env_var` value has changed. + + ### Tests @@ -44,12 +53,19 @@ dbt test -s "state:modified" --exclude "test_name:relationships" ### False positives + + +To reduce false positives during `state:modified` selection due to env-aware logic, you can set the `state_modified_compare_more_unrendered` [behavior flag](/reference/global-configs/behavior-changes#behavior-change-flags) to `True`. + + + + State comparison works by identifying discrepancies between two manifests. Those discrepancies could be the result of: 1. Changes made to a project in development -2. Env-aware logic that causes different behavior based on the `target`, env vars, etc. +2. Env-aware logic that causes different behavior based on the `target`, env vars, etc., which can be avoided if you upgrade to dbt Core 1.9 and set the `state_modified_compare_more_unrendered` [behavior flag](/reference/global-configs/behavior-changes#behavior-change-flags) to `True`. -State comparison detects env-aware config in `dbt_project.yml`. This target-based config registers as a modification: +State comparison detects env-aware config in `dbt_project.yml`. This target-based config won't register as a modification: @@ -73,6 +89,7 @@ That means the following config—functionally identical to the snippet above— materialized = ('table' if target.name == 'prod' else 'view') ) }} ``` + ### Final note