dbt-labs/dbt-core · warning
No configuration changes were identified on: `{{ target_rela
Error message
No configuration changes were identified on: `{{ target_relation }}`. Continuing. What it means
This is a warning emitted by the Snowflake interactive table materialization when dbt detects no configuration changes between the model's rendered config and the existing interactive table. The materialization short-circuits with an empty build_sql and warns via `exceptions.warn` instead of issuing any DDL. It is informational: nothing is wrong, dbt just found no ALTER to perform.
Source
Thrown at crates/dbt-loader/src/dbt_macro_assets/dbt-snowflake/macros/materializations/interactive_table.sql:45
-- funcsign: (optional[relation], relation) -> string
{% macro interactive_table_get_build_sql(existing_relation, target_relation) %}
{% set full_refresh_mode = should_full_refresh() %}
{#- determine the scenario we're in: create, full refresh, alter -#}
{% 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) %}View on GitHub (pinned to 0267ce9170)
Solutions
- No action needed if the table is up to date — the run continues and build_sql is empty by design
- If you expect changes to be detected, verify the model config values actually differ from the existing relation (SHOW INTERACTIVE TABLE / DESCRIBE)
- If the state comparison is wrongly returning none, check that the relation exists in the cache and wasn't dropped out-of-band
Defensive patterns
Strategy: validation
Validate before calling
// verify the existing relation's config matches the model config before running
// e.g. compare target_lag/warehouse against SHOW INTERACTIVE TABLE output
const drift = compareRelationConfig(existingRelation, modelConfig);
if (drift.length === 0) {
console.log('No config drift; warning is expected and harmless.');
} Prevention
- Treat this warning as informational — do not 'fix' it when the table is already up to date
- Check the relation cache if you expected changes to be detected
- Keep interactive table config in schema.yml so diffs are reviewable
When it happens
Trigger: Running `dbt run` on a Snowflake model materialized as interactive_table where `snowflake__get_interactive_table_configuration_changes(existing_relation, config)` returns none, meaning every config option (cluster_by, automatic_clustering, etc.) matches the existing relation.
Common situations: Re-running a model with unchanged config after a previous build; misreading the warning as an error when the table is actually already up to date.
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_
- 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
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/bed763ecfd6b4deb.
Report an issue: GitHub.