Prevent accidental replacement of production tables while allowing dbt-managed schema evolution

We had an incremental model using the delete+insert strategy. Instead of updating the existing production table, dbt treated it as missing, followed its initial-creation path, and replaced it with an empty table.

Overriding dbt’s table-creation macro could prevent this, but we want to avoid maintaining custom behavior that may diverge from future dbt and adapter updates.

Removing DDL and ownership privileges from the Airflow role would also prevent replacement, but it would stop dbt from automatically creating new models and applying schema changes such as adding or removing columns. This would require a separate schema-migration process and duplicate dbt’s schema management.

Is there a Snowflake or dbt-supported approach that:

  • Allows normal incremental DML.
  • Allows dbt to create new models and apply approved schema changes.
  • Prevents accidental replacement, dropping, or destructive full refreshes of existing production tables.
  • Avoids custom dbt macro overrides and a separate schema-migration system?