dbt-labs/dbt-core · warning
Configuration changes were identified and…
Error message
Configuration changes were identified and `on_configuration_change` was set to `continue` for `{target_relation}` What it means
dbt emits this warning when a materialized view's configuration changed between runs but the model's `on_configuration_change` is set to `continue`. Instead of applying (ALTER) or failing, dbt skips the rebuild entirely and just refreshes nothing, leaving the existing materialized view with its old configuration. It is raised via `exceptions.warn` in the databricks materialized_view macro.
Solutions
- Change `on_configuration_change` to `'apply'` in the model config so ALTER statements run and the config change takes effect.
- If the change is intended and the config drift is expected, no action is needed; the warning is informational.
- If you want the run to fail loudly when config drifts, set `on_configuration_change='fail'`.
- As a one-off, run the model with `--full-refresh` so the materialized view is recreated with the new configuration.
Example fix
-- before
{{ config(materialized='materialized_view', on_configuration_change='continue') }}
-- after
{{ config(materialized='materialized_view', on_configuration_change='apply') }} Defensive patterns
Strategy: validation
Validate before calling
# In CI, before dbt run:
assert model_config.get('on_configuration_change') in ('apply', 'skip', 'continue', 'fail')
# Fail the pipeline if config drift should never be ignored:
assert model_config.get('on_configuration_change') != 'continue' Prevention
- Default materialized views/streaming tables to `on_configuration_change='apply'` unless downtime is a concern.
- Search dbt_project.yml and model configs for 'continue' when making config changes to incremental-like relations.
- Treat this warning as config drift: verify applied DDL matches the model after every config edit.
When it happens
Trigger: Running `dbt run` on a materialized view whose config (e.g. schedule, refresh, clustering keys) differs from the relation in the warehouse while the model sets `on_configuration_change='continue'` (in config block or dbt_project.yml).
Common situations: Teams adding or editing materialized-view properties like `mv_seed`/refresh cadence who deliberately chose 'continue' to avoid downtime, then forget the change is never applied; or inheriting configs where someone set 'continue' for CI safety.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Configuration changes were identified and…
- Cannot apply incremental predicates with
- Configuration changes were identified and…
- Constraint of type } with no `name` provided. Generating…
- Constraint of type with no `name` provided. Generating hash…
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/20fc525470b60cbf.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-loader/src/dbt_macro_assets/dbt-databricks/macros/materializations/materialized_view.sql:44
-- determine the scenario we're in: create, full_refresh, alter, refresh data
{% if existing_relation is none %}
{% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}
{% elif full_refresh_mode or not existing_relation.is_materialized_view %}
{% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}
{% else %}
-- get config options
{% set on_configuration_change = config.get('on_configuration_change', 'apply') %} {# DIVERGENCE: core does not default to `apply` here because it sets it elsewhere in the Python code #}
{% set configuration_changes = get_configuration_changes(existing_relation) %}
{% if configuration_changes is none %}
{% set build_sql = refresh_materialized_view(target_relation) %}
{% elif on_configuration_change == 'apply' %}
{% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, None, None) %}
{% elif on_configuration_change == 'continue' %}
{% set build_sql = "" %}
{{ exceptions.warn("Configuration changes were identified and `on_configuration_change` was set to `continue` for `" ~ target_relation ~ "`") }}
{% elif on_configuration_change == 'fail' %}
{{ exceptions.raise_fail_fast_error("Configuration changes were identified and `on_configuration_change` was set to `fail` for `" ~ target_relation ~ "`") }}
{% else %}
-- this only happens if the user provides a value other than `apply`, 'skip', 'fail'
{{ exceptions.raise_compiler_error("Unexpected configuration scenario") }}
{% endif %}
{% endif %}
{% do return(build_sql) %}
{% endmacro %}
{% macro materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}
View on GitHub (pinned to 0267ce9170)