Adovo

Data & Analytics

A Databricks materialized view breaks after an upstream column appears

Spot query-schema drift in dbt materialized views before a refresh failure surprises downstream users.

October 29, 2026

A Databricks source gains a column. A dbt materialized view defined with unchanged select * now infers a different column list from the view created earlier, and its refresh can fail with an incompatible schema error. An open dbt issue describes this exact path for Fusion’s Databricks adapter. The SQL file did not change, but the query’s output contract did.

Detect the change before refresh

Compare the ordered column names inferred from the current query with those stored in the existing materialized view. Include upstream schema snapshots in the deployment review for models that use select *. The issue explicitly distinguishes column-name drift from type-label differences; do not treat every cosmetic type spelling difference as a reason to replace a view. Identify the downstream dashboards and contracts that consume the column list.

Choose a controlled response

The dbt issue proposes that on_configuration_change: apply take a replacement path when ordered names differ, while continue reports a skipped change and fail raises an error. These are expected behaviors in an open implementation issue, not a guarantee that every installed adapter version acts this way. Check your package version and test it with a small fixture. Replacement may have operational and access consequences; review them before enabling an automatic path.

Reduce the blast radius of upstream volatility

For business-facing models, prefer explicit projections when a new upstream field should not silently enter the contract. A recent practitioner discussion likewise separates flexible raw ingestion from more stable downstream contracts. Set an alert on unexpected columns and decide whether each belongs in the curated view. The dbt Databricks configuration reference is the source for adapter behavior; use it with the installed version rather than assuming a general dbt rule.

Adovo’s view

An unchanged query is not an unchanged contract when it selects everything. Make column drift visible at the boundary between raw data and trusted reporting. A refresh should fail loudly or change deliberately; it should not surprise consumers with a new shape.

Continue exploring

Data & Analytics

dbtDatabricks

A dbt Fusion null override can leave an inherited DELETE merge action

Audit effective dbt merge configuration before a model-level null override is trusted to remove a destructive action.

Read more

Data & Analytics

dbtData Contracts

A dbt model contract can miss a breaking change inside STRUCT

A nested field type change may pass a model-version breaking-change check. Compare normalized schemas and downstream behavior before release.

Read more

Data & Analytics

dbtIncremental Models

A dbt incremental run replaces a production table with empty data

An unexpected initial-build path can turn an incremental model run into a table replacement. Protect row counts and rebuild authorization while retaining managed schema evolution.

Read more
Explore data and analytics services →