首页/数据/数仓建模速查/SCD 变更检测:hashdiff 与逐列比较
维度与事实设计149 条

SCD 变更检测:hashdiff 与逐列比较

hashdiff 用整行拼接哈希快速判定「是否变更」,逐列比较可精确定位「改了哪列」;组合使用效果更好:先哈希筛选再逐列定位。

数仓建模速查数据更新于 2026-10-12
hashdiff整行指纹,快
逐列比较明细定位,慢
组合先过滤再定位

逐列差异定位

逐列差异定位
SELECT customer_id,
       CASE WHEN d.name <> s.name THEN 'name'
            WHEN d.phone <> s.phone THEN 'phone' END AS changed_col
FROM dim_customer d
JOIN stg_customer s ON d.customer_id = s.customer_id AND d.is_current = 1
WHERE NOT (d.name <=> s.name) OR NOT (d.phone <=> s.phone);
拼接时用 coalesce 把空值替换为固定标记,保证两端算法与字段顺序完全一致。

易错点

  • 拼接字段顺序或分隔符不一致,哈希永远不相等
  • 空值表示两端不一致,正常记录被误判为变更

数据来源与参考

  • 数仓实践:变更数据捕获与维度加载
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌