dbt-labs/dbt-core · warning
Configuration changes were identified and `on_configuration_
Error message
Configuration changes were identified and `on_configuration_change` was set to `continue` for `{{ target_relation }}` What it means
This warning is emitted by the Snowflake interactive table materialization when the model's configuration differs from the existing relation but `on_configuration_change` is set to `continue`. dbt leaves build_sql empty and warns, meaning the config drift is acknowledged but intentionally not applied. The table keeps its current configuration.
Source
Thrown at crates/dbt-loader/src/dbt_macro_assets/dbt-snowflake/macros/materializations/interactive_table.sql:51
{% if existing_relation is none %}
{% set build_sql = get_create_sql(target_relation, sql) %}
{% elif full_refresh_mode or not existing_relation.is_interactive_table %}
{% 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 = snowflake__get_interactive_table_configuration_changes(existing_relation, config) %}
{% if configuration_changes is none %}
{% set build_sql = '' %}
{{ exceptions.warn("No configuration changes were identified on: `" ~ target_relation ~ "`. Continuing.") }}
{% elif on_configuration_change == 'apply' %}
{% set build_sql = snowflake__get_alter_interactive_table_as_sql(existing_relation, configuration_changes, target_relation, sql) %}
{% 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`, 'continue', 'fail' -#}
{{ exceptions.raise_compiler_error("Unexpected configuration scenario: `" ~ on_configuration_change ~ "`") }}
{% endif %}
{% endif %}
{% do return(build_sql) %}
{% endmacro %}
-- funcsign: (relation) -> string
{% macro interactive_table_execute_no_op(relation) %}View on GitHub (pinned to 0267ce9170)
Solutions
- Change `on_configuration_change` to `apply` so dbt issues `snowflake__get_alter_interactive_table_as_sql` ALTER statements
- Change it to `fail` to make config drift break the run instead of being skipped
- Apply the change manually with an ALTER INTERACTIVE TABLE statement, or rebuild with `--full-refresh`
- Confirm the intended config change is in the right model/ENV (staging vs prod discrepancy)
Example fix
// before
{{ config(materialized='interactive_table', on_configuration_change='continue') }}
// after
{{ config(materialized='interactive_table', on_configuration_change='apply') }} Defensive patterns
Strategy: validation
Validate before calling
const cfg = model.config;
if (cfg.materialized === 'interactive_table' && cfg.on_configuration_change === 'continue') {
console.warn('Config drift will be acknowledged but NOT applied to the interactive table.');
} Prevention
- Prefer 'apply' for interactive tables unless ALTER cost is prohibitive
- Use 'fail' in CI pipelines to surface config drift as a hard failure
- Audit configs after promotions between environments
- Document the on_configuration_change choice per model in schema.yml descriptions
When it happens
Trigger: Running `dbt run` on a Snowflake interactive_table model whose rendered config changed (e.g. cluster_by, target_lag) with `on_configuration_change='continue'` configured.
Common situations: CI pipelines configured with `continue` to avoid costly ALTERs silently skip config updates; developers confused why config changes never take effect on the table.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Configuration changes were identified and `on_configuration_
- No configuration changes were identified on: `{{ target_rela
- dbt is currently configured to list a maximum of {{ max_resu
- {type(df)} is not a supported type for dbt Python materializ
- {type(df)} is not a supported type for dbt Python materializ
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/2a72ec3d1d4b4198.
Report an issue: GitHub.