1. SCD2 的生效日期/失效日期/当前标志位设计与拉链表(zipper table)实现
SCD2 的生效日期/失效日期/当前标志位如何设计,拉链表(zipper table)如何实现?
- SCD2 的版本历史保留
- 生效/失效日期与当前标志
- 拉链表实现
SCD2(type 2 缓慢变化维)保留维度的历史版本,每次属性变化都新增一条记录,用生效日期(start_date)、**失效日期(end_date)与当前标志(is_current)**标识每条记录的有效期。设计:新属性变化时把旧记录 end_date 设为当前日期、is_current=false,插入新记录 start_date=当前日期、end_date=9999-12-31(或 null)、is_current=true。查询当前状态用 is_current=true,回溯历史用 start_date <= 某日 < end_date。拉链表(zipper table)实现:在 Hive/Spark SQL 中,增量更新时用全量拉链 + 增量合并:①把增量(新变化的维度行)与历史拉链表按主键 join,标记哪些历史记录需要失效(end_date=当前日期);②插入新的有效记录(基于增量当前值);③保留未变化的记录。实现可用 left join + case when 或 union 合并,或用 Spark 的 merge(Delta/Iceberg)做 upsert。拉链表在"key 很大但每次变化不多"的场景下能显著减少存储(相比全量快照),同时保留历史。注意需处理:新增记录、属性变化、失效记录三种情况,并保证主键+生效日期唯一。
抓住"SCD2 用起止日期+当前标志保历史"。核心是"拉链表的增量失效+追加"。答题要点到 start/end 日期与 is_current 三要素。