<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How should schema evolution be handled across silver and gold layers in a medallion architecture in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/how-should-schema-evolution-be-handled-across-silver-and-gold/m-p/165264#M55407</link>
    <description>&lt;P&gt;&lt;FONT size="3"&gt;You can skip using&amp;nbsp;traditional schema migration tools like Liquibase, Flyway or Alembic into Delta Lake as they&amp;nbsp;were generally designed for relational databases where state is tracked through sequential DDL scripts.&lt;/FONT&gt;&lt;/P&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Silver Layer&lt;/FONT&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;New Columns -&lt;/STRONG&gt;&amp;nbsp;You can let Spark handle column additions automatically during writes. For standard append or overwrite operations, configure the schema merge option on the Data Frame writer. You can check the cdc merge configuration &amp;amp; use it if feasible&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Column Renames -&amp;nbsp;&lt;/STRONG&gt;&amp;nbsp;You can treat renames as transformation logic rather than table migrations. Keep Bronze completely immutable. In your Silver transformations, read the incoming Bronze fields and alias them to the standardized Silver naming conventions. If you must physically rename a column on a Delta table without rewriting underlying data files, enable &lt;STRONG&gt;Delta Column Mapping&lt;/STRONG&gt; on the Silver table properties which generally turns renames into instant metadata updates.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Dropped Columns -&lt;/STRONG&gt;&amp;nbsp;To keep Silver from accumulating dead columns over time, you can avoid using SELECT * in Silver job definitions explicitly project the required column list instead. If you need to physically purge a dropped column from the table metadata without triggering a heavy data rewrite, use &lt;STRONG&gt;Delta Column Mapping&lt;/STRONG&gt; allows you to execute column &lt;STRONG&gt;drops&lt;/STRONG&gt; as metadata operations if feasible.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Gold Layer&lt;/FONT&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Automatic Column Sync -&lt;/STRONG&gt;&amp;nbsp;Configure the on_schema_change setting in your dbt incremental model config blocks or globally in your project file. Setting on_schema_change to sync_all_columns will generally add new columns to Gold and drop removed columns on the next incremental execution. Alternatively, append_new_columns will add incoming fields while preserving historical columns if an upstream field is dropped.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Renames &amp;amp; Deprecations -&lt;/STRONG&gt;&amp;nbsp;Handle column renames within your dbt model CTEs by aliasing the updated Silver column back to the expected Gold schema. For dropped columns where downstream BI dashboards still uses, you can supply default NULL values in the dbt SELECT statement before removing the column entirely via sync_all_columns.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Deployment&lt;/FONT&gt;&lt;/H3&gt;&lt;P&gt;&lt;FONT size="3"&gt;You can add a schema validation task at the start of your workflow that compares bronze and silver metadata, firing an alert when schema drift occurs to catch unexpected source changes before they hit reports.&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 10 Aug 2026 16:01:51 GMT</pubDate>
    <dc:creator>balajij8</dc:creator>
    <dc:date>2026-08-10T16:01:51Z</dc:date>
    <item>
      <title>How should schema evolution be handled across silver and gold layers in a medallion architecture?</title>
      <link>https://community.databricks.com/t5/data-engineering/how-should-schema-evolution-be-handled-across-silver-and-gold/m-p/165262#M55406</link>
      <description>&lt;P class=""&gt;We run a medallion pipeline on Databricks:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Bronze: AutoLoader ingests raw CSV files into Delta tables (append-only, all columns as STRING, schema evolution via addNewColumns)&lt;/LI&gt;&lt;LI&gt;Silver: PySpark jobs clean and transform bronze data into Delta tables using batch writes and CDC merge&lt;/LI&gt;&lt;LI&gt;Gold: dbt incremental models aggregate silver into fact and measure tables&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;AutoLoader handles bronze schema evolution automatically. The problem is silver and gold.&lt;/P&gt;&lt;P&gt;When a source adds or renames a column, we currently handle it manually - authoring ALTER TABLE statements for silver Delta tables and running dbt run --full-refresh for gold. This works but is ad-hoc and error-prone, especially for column renames.&lt;/P&gt;&lt;P class=""&gt;Our most frequent case is new columns being added by the source. We also care about dropped columns - we don't want dead columns accumulating in silver and gold tables over time.&lt;/P&gt;&lt;P class=""&gt;Questions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is there a recommended pattern for managing silver Delta table schema changes in a DAB-deployed pipeline - beyond manual ALTER TABLE?&lt;/LI&gt;&lt;LI&gt;Should we introduce a schema migration tool like Alembic/Liquibase/Flyway for Delta tables?&lt;/LI&gt;&lt;/OL&gt;</description>
      <pubDate>Mon, 10 Aug 2026 15:15:58 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/how-should-schema-evolution-be-handled-across-silver-and-gold/m-p/165262#M55406</guid>
      <dc:creator>temarych</dc:creator>
      <dc:date>2026-08-10T15:15:58Z</dc:date>
    </item>
    <item>
      <title>Re: How should schema evolution be handled across silver and gold layers in a medallion architecture</title>
      <link>https://community.databricks.com/t5/data-engineering/how-should-schema-evolution-be-handled-across-silver-and-gold/m-p/165264#M55407</link>
      <description>&lt;P&gt;&lt;FONT size="3"&gt;You can skip using&amp;nbsp;traditional schema migration tools like Liquibase, Flyway or Alembic into Delta Lake as they&amp;nbsp;were generally designed for relational databases where state is tracked through sequential DDL scripts.&lt;/FONT&gt;&lt;/P&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Silver Layer&lt;/FONT&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;New Columns -&lt;/STRONG&gt;&amp;nbsp;You can let Spark handle column additions automatically during writes. For standard append or overwrite operations, configure the schema merge option on the Data Frame writer. You can check the cdc merge configuration &amp;amp; use it if feasible&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Column Renames -&amp;nbsp;&lt;/STRONG&gt;&amp;nbsp;You can treat renames as transformation logic rather than table migrations. Keep Bronze completely immutable. In your Silver transformations, read the incoming Bronze fields and alias them to the standardized Silver naming conventions. If you must physically rename a column on a Delta table without rewriting underlying data files, enable &lt;STRONG&gt;Delta Column Mapping&lt;/STRONG&gt; on the Silver table properties which generally turns renames into instant metadata updates.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Dropped Columns -&lt;/STRONG&gt;&amp;nbsp;To keep Silver from accumulating dead columns over time, you can avoid using SELECT * in Silver job definitions explicitly project the required column list instead. If you need to physically purge a dropped column from the table metadata without triggering a heavy data rewrite, use &lt;STRONG&gt;Delta Column Mapping&lt;/STRONG&gt; allows you to execute column &lt;STRONG&gt;drops&lt;/STRONG&gt; as metadata operations if feasible.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Gold Layer&lt;/FONT&gt;&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Automatic Column Sync -&lt;/STRONG&gt;&amp;nbsp;Configure the on_schema_change setting in your dbt incremental model config blocks or globally in your project file. Setting on_schema_change to sync_all_columns will generally add new columns to Gold and drop removed columns on the next incremental execution. Alternatively, append_new_columns will add incoming fields while preserving historical columns if an upstream field is dropped.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Renames &amp;amp; Deprecations -&lt;/STRONG&gt;&amp;nbsp;Handle column renames within your dbt model CTEs by aliasing the updated Silver column back to the expected Gold schema. For dropped columns where downstream BI dashboards still uses, you can supply default NULL values in the dbt SELECT statement before removing the column entirely via sync_all_columns.&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;&lt;FONT size="3"&gt;Deployment&lt;/FONT&gt;&lt;/H3&gt;&lt;P&gt;&lt;FONT size="3"&gt;You can add a schema validation task at the start of your workflow that compares bronze and silver metadata, firing an alert when schema drift occurs to catch unexpected source changes before they hit reports.&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 10 Aug 2026 16:01:51 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/how-should-schema-evolution-be-handled-across-silver-and-gold/m-p/165264#M55407</guid>
      <dc:creator>balajij8</dc:creator>
      <dc:date>2026-08-10T16:01:51Z</dc:date>
    </item>
  </channel>
</rss>

