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

Same family as the materialized-view variant: when a streaming table's configuration changes but `on_configuration_change` is `continue`, dbt skips applying the change (no ALTER/rebuild) and warns instead. The existing streaming table keeps its old definition while the model file reflects a new one.

Solutions

  1. Set `on_configuration_change='apply'` in the streaming table's config so the ALTER runs.
  2. Use `dbt run --full-refresh` once to recreate the streaming table with the new configuration.
  3. Set `on_configuration_change='fail'` if you prefer the pipeline to stop and force an explicit decision.
  4. If skipping is intentional, dismiss the warning; it confirms the change was not applied.

Example fix

-- before
{{ config(materialized='streaming_table', on_configuration_change='continue') }}
-- after
{{ config(materialized='streaming_table', on_configuration_change='apply') }}
Defensive patterns

Strategy: validation

Validate before calling

# Before deploying streaming table changes:
if config.on_configuration_change == 'continue' and config_changed:
    raise ValueError('streaming_table config changed but on_configuration_change=continue; change will not be applied')

Prevention

When it happens

Trigger: Running `dbt run` on a model with `materialized='streaming_table'` whose config differs from the deployed relation, with `on_configuration_change='continue'` configured.

Common situations: Editing a streaming table's target refresh interval or other Databricks streaming-table properties and expecting the change to land, while a 'continue' setting (often copied from a template) silently skips it.

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


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/37c3661b99b5ad0d. Report an issue: GitHub.

Appendix: source

Thrown at crates/dbt-loader/src/dbt_macro_assets/dbt-databricks/macros/materializations/streaming_table.sql:45

    -- determine the scenario we're in: create, full_refresh, alter, refresh data
    {% if existing_relation is none %}
        {% set build_sql = get_create_streaming_table_as_sql(target_relation, sql) %}
    {% elif full_refresh_mode or not existing_relation.is_streaming_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 = get_configuration_changes(existing_relation) %}
        {% if configuration_changes is none %}
            {{ log("REFRESHING STREAMING TABLE: " ~ target_relation) }}
            {% set build_sql = refresh_streaming_table(target_relation, sql) %}

        {% elif on_configuration_change == 'apply' %}
            {% set build_sql = get_alter_streaming_table_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 streaming_table_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}

    -- `BEGIN` happens here:

View on GitHub (pinned to 0267ce9170)