Adding a column and changing the history-tracking configuration need separate checks. Databricks describes adding columns as generally safe without a full refresh:
"Plan your schema to avoid changes that require a full refresh. Adding columns is generally safe, while modifying existing columns or partitioning schemes typically requires recomputing the table."
However, the snapshot API reference does not explicitly guarantee changing the tracking list on an already populated SCD2 target without rebuilding it. I wouldn't give an unconditional "yes" based on the documentation alone.
For region, the configuration is:
Add it to track_history_column_list, retaining your existing tracked columns. If you use track_history_except_column_list, keep region out of that list. The latter excludes columns from history tracking, not from the output table. The snapshot API reference explains both options.
Protect the history before making the change.
A full refresh clears the streaming target and its checkpoints. Your current-state materialized view alone cannot reconstruct the customer versions that have already disappeared from it. See the refresh documentation.
Add pipelines.reset.allowed=false to your existing target declaration, preserving its other settings and table properties:
from pyspark import pipelines as dp
dp.create_streaming_table(
name="conformed_customer_history",
table_properties={
"pipelines.reset.allowed": "false",
# Retain your other table properties here.
},
)This prevents full refreshes of that table. It does not enable schema evolution or make an incompatible change supported. The property is documented in the pipeline properties reference.
Test the transition on a non-production target that already contains history.
Check that previously closed versions remain unchanged with region=NULL. Pay particular attention to the first snapshot containing a non-null region: does it close the existing active version and create another, or populate the active version in place? Then change only region and check for a new version; repeat an unchanged snapshot and check that none is added.
That first snapshot is the important boundary in your example. Successful subsequent tracking would not, by itself, establish that introducing the column preserved the history exactly as you intended.