1
什么是拉链表
1)拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。
2)使用拉链表既能满足反应数据的历史状态,又可以最大程度的节省存储。
3)拉链表多适用于表中频率和变化比例较低的场景。
2
如何构建维度拉链表
1. 理想情况
1)数仓中需要构建保存历史维度信息的维度表时,一般推荐创建维度拉链表(维度属性的变化频率较低)。
2)维度拉链创建举例(记录员工所属部门发生变化的维度表)如下:
① 新入职时,工号为1和2的员工所属部门均是部门01,构建拉链维度表如下图,注意此时工号1和2的员工所属部门01的生效时间是2024-01,失效时间是9999-12(无穷大)。
② 2024-02月人事调整,工号1和工号2的员工所属部门由部门01变更为部门02,构建拉链维度表如下图,注意此时工号1和2的员工所属部门01的失效时间变更为2024-02,所属部门02属性的失效时间变更为9999-12。采用拉链的方式记录了员工所属部门由部门01变动至部门02的变化。
2. 复杂情况
第2节中描述的是一种非常理想的状态,即每次获取的源端数据中仅包含维度发生变化的数据且只是发生了一次变化,如果源端数据中存在重复数据、发生多次变化的数据如何处理?例如: 员工1和2在2024-03部门(相比于2024-02)未发生变化,2024-04部门变更为部门03,2024-05部门仍然为部门03,2024-06部门变更为部门02,以上所有数据同时读取后如何构建拉链?源端数据如下:
针对上述情况的数据,主要思路为先按工号进行分组,分组后按发生时间进行升序排序,排序后相邻数据中所属部门一致的仅取第一条。示例如下:
源端数据处理后,和已存在拉链表数据做拉链,入库时工号相同的数据按发生时间正序插入,插入时需和拉链表中失效时间为9999-12的记录比较,工号一致的且部门一致的记录丢弃,最终维度表记录如下。