Adovo

Data & Analytics

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.

October 29, 2026

A project sets a folder-level merge_actions_explicit value that includes WHEN MATCHED THEN DELETE. A model tries to clear it with null, but the inherited action remains in Fusion’s effective configuration. The open dbt issue reproduces this difference from dbt-databricks and notes that an empty string currently acts as an opt-out. The practical risk is a model owner believing a deletion rule was removed when the compiled model still carries it.

Inspect what the model will execute

Search project and folder configuration for explicit merge actions, then inspect the model’s effective configuration in manifest.json and the compiled merge SQL. Review every model inheriting that folder scope, not just the one with an override. A code review of the local model file alone cannot establish runtime behavior. Capture the dbt/Fusion and adapter versions with the evidence; this issue is version-specific and still open.

Test the override in a disposable dataset

The issue reports that merge_actions_explicit: '' produces generated clauses where null does not. Treat this as a reported workaround, not a universal configuration policy. Run a minimal nonproduction model with matched, unmatched, and would-be-deleted rows; compare before and after. Confirm the executed SQL and row-level outcome before changing a production job. The dbt Databricks reference explains the incremental merge strategy and its configuration surfaces.

Add a release guard for destructive clauses

If your models permit explicit delete actions, require a review of effective compiled configuration whenever hierarchy or adapter versions change. A test can fail when a model that should retain rows compiles WHEN MATCHED THEN DELETE. Keep rollback data for the first production run after a config change. The aim is to make the destructive path visible before a scheduled job touches customer records.

Adovo’s view

The source file is an intention; the compiled merge is the contract with the data. For destructive actions, review that contract directly. A single inherited clause can outweigh a page of reassuring configuration.

Continue exploring

Data & Analytics

dbtDatabricks

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.

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

Data & Analytics

dbtIncremental models

dbt incremental model misses lookup changes: rebuild the affected keys

A source row stays unchanged while its joined lookup value changes. The dbt run passes but the served dimension remains stale.

Read more
Explore data and analytics services →