首页/数据/数仓建模速查/SCD2 关闭旧版本行的正确条件
维度与事实设计149 条

SCD2 关闭旧版本行的正确条件

关闭条件必须同时锁定「自然键 + 当前版本」两个条件:缺少 is_current 过滤会把历史行一起重写,造成区间错乱。

数仓建模速查数据更新于 2026-10-12
锁定列自然键 + is_current=1
更新列end_date 与当前标志
顺序先关闭后插入

关闭旧版本

关闭旧版本
UPDATE dim_customer
SET end_date = :batch_dt, is_current = 0
WHERE customer_id IN (SELECT customer_id FROM changed_keys)
  AND is_current = 1;
在 Hive/Spark 等以分区重写为代价的引擎上,大规模 UPDATE 要评估改成「重写受影响分区」方案。

易错点

  • 忘记 is_current 过滤,整条版本链被改写
  • 重跑无幂等保护,end_date 被后一批次覆盖

数据来源与参考

  • 数据仓库工具箱:维度版本管理
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌