缓慢变化维(SCD)是什么?Type 1 / Type 2 怎么选?
SCD维度表历史拉链
考察意图
建模进阶。考察是否理解「属性变更要不要保留历史」。
回答框架
- 定义 SCD:维度属性随时间变化。
- Type1 覆盖 vs Type2 留历史。
- 实现:生效/失效时间、当前旗标。
- 选型看分析是否需要「当时」状态。
参考答案(口述版)
缓慢变化维:维度表中的描述属性会变(用户城市、商品类目、员工部门)。
- Type 1:直接覆盖。简单,丢历史。适合纠错或不关心历史的属性。
- Type 2:新增一行版本,用 start_date/end_date 或 is_current 保留历史。适合「要按历史属性归因」的分析(如当时所属渠道)。
- Type 3:在同行保留少量「前值」列,用得较少。
选型:若报表需要「下单时用户的会员等级」而非「当前等级」,必须 Type 2(或事实表退化快照属性)。实现要注意区间半开闭约定与变更日对齐,避免双计或空洞。
关键词
Type1Type2生效区间历史归因
面试官可能的追问
追问 1:拉链和快照表怎么选?
拉链省空间、查「任意一天状态」稍复杂;每日全量快照简单但存储大。高频近线查询可快照,长期存档可拉链。
常见踩坑
- 该留历史却用 Type1,导致历史报表被「改写」
- Type2 区间重叠造成关联翻倍
记忆锚点
要「当时状态」用 Type2;只关心当前用 Type1。