请描述在数据仓库环境中,针对缓慢变化维度(SCD)类型 2 的实现方法与关键考虑因素。
考察说明
考查对数据仓库维度建模中 SCD 类型 2 的核心理解与实现细节。
回答思路
- 【回答框架 1】SCD 类型 2 用于跟踪维度属性变化的历史,通过为每条记录增加版本信息(如有效起始日期、有效结束日期、当前标志),当属性变化时,将原记录标记为过期,并插入新记录。
- 【回答框架 2】实现时,需确定维度表的唯一业务键(如客户 ID)与代理键(如自增主键),代理键用于关联事实表,业务键用于判断记录是否变化。
- 【回答框架 3】当源数据发生变化时,通过比对业务键对应的当前记录与源数据,若属性不同,则更新旧记录的结束日期与当前标志,同时插入新记录并设置起始日期。
- 【回答框架 4】查询历史数据时,需基于时间过滤‘有效日期范围’;查询当前数据时,筛选‘当前标志’为是。注意需要避免代理键的重复分配。
- 【回答框架 5】在 ETL 过程中,需考虑性能优化:如使用批量更新、索引设计(代理键、业务键、当前标志),以及历史变化频率的评估,避免过度膨胀维度表。
- 【关键点 1】SCD 类型 2 通过版本化实现历史追踪,核心是有效时间区间与当前标志。
- 【关键点 2】事实表关联必须使用代理键,业务键仅用于识别实体。
- 【关键点 3】处理变更时需事务保证,更新旧记录与插入新记录需原子性。
- 【关键点 4】查询需明确区分当前与历史,可通过当前标志或有效日期过滤。
- 【关键点 5】性能优化需平衡历史保留与存储成本,可考虑使用分区或索引。
- 【易错点 1】容易忽略业务键与代理键的冲突,如代理键分配错误导致事实表关联错误。
- 【易错点 2】ETL 过程中未使用事务可能导致旧记录更新成功但新记录插入失败,造成数据不一致。
- 【易错点 3】基于有效日期查询时,容易产生边界问题(如起始日期的包含与结束日期的排除)。