类型 1 是什么
类型 1 只保留最新值,变更时原地覆盖旧值:名称写错后改正、编码补全、缺失值补齐,都属于这类纠错型变更。它不承担历史分析需求,覆盖后历史报表的呈现会随之改变——这不是缺陷,而是它与类型 2 的根本区别。选型时先问一句「这个属性变化时,历史分析是否需要按变化前的值来解释」,需要就必须用类型 2 或类型 3。
基本信息
| 历史 | 不保留,只有最新值 |
|---|---|
| 写法 | update 或 merge 原地覆盖 |
| 适用 | 纠错、补全、编码规整类属性 |
| 副作用 | 历史报表的维度呈现随最新值变化 |
| 实现注意 | 大表原地更新会触发锁与存储膨胀 |
典型使用场景
- 名称纠错:客户名称录入有误,改正后所有报表都应显示正确名称
- 编码补全:来源缺失的行政区编码用权威编码补齐
- 大小写与空格规整:统一后同一实体的写法归一
- 口径统一:旧口径的枚举值重映射到新口径
- 联系人信息更新:电话、邮箱变更只关心最新值
- 误分类修正:之前归类错误,修正后不需要保留错误版本
覆盖写法
覆盖写法
-- 只更新当前行,历史版本行不动
UPDATE dim_user d
JOIN stg_user s ON s.id = d.user_id
SET d.user_name = s.user_name
WHERE d.is_current = 1;
-- 用 MERGE 写法(同一语义,注意条件里必须带 is_current)
MERGE INTO dim_user d
USING stg_user s ON d.user_id = s.id AND d.is_current = 1
WHEN MATCHED THEN UPDATE SET d.user_name = s.user_name;选型对照
| 属性变化含义 | 推荐类型 | 原因 |
|---|---|---|
| 记录写错了要改正 | 类型 1 | 历史本身就是错的,保留没有意义 |
| 业务事实确实变了 | 类型 2 或 3 | 历史分析要按变化前的值解释 |
| 只想看最近一次变化 | 类型 3 | 一跳历史足够,表宽固定 |
| 字段经常变化但无分析价值 | 类型 1 | 避免版本行堆积造成膨胀 |
| 属性影响历史归因(等级、区域) | 类型 2 | 按当时口径统计必须保留版本 |
类型 1 的更新会改写历史报表的呈现:如果某个维度属性被用于历史分组,一旦覆盖,上月的分组结果与本次报表可能不一致,已对外披露的数字会变。因此对已被报表引用的属性改用类型 1 之前,必须与使用方确认口径影响。