1、定义:维护历史状态以及最新数据的一种表(拉链表会增加两个字段,开链时间,闭链时间)
2、使用场景
1、有一些表的数据量很大,比如一张用户表,大约1亿条记录,50个字段,这种表
2.表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。
3.需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态。
4.表中的记录变化的比例和频率不是很大,比如,总共有1亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。
3、主要优点
维护历史状态:能够记录数据的历史变化,提供数据的完整视图。
优化存储:通过去除不变的记录,减少存储需求,同时允许快速还原历史状态。
处理缓慢变化数据:是处理缓慢变化数据(SCD2)的一种常见方式,适用于需要跟踪数据缓慢变化的应用场景。
然而,拉链表也存在一些挑战和限制,例如需要额外的字段来存储生效日期和失效日期,这可能会增加表结构的复杂性。此外,对于频繁更新的数据,拉链表可能需要更频繁的维护和更新操作。
4、orcal里面拉链表的四种获取数据的方式
4.1.更新删除数据,需要将闭链时间修改成昨天,etl时间修改成今天
4.2.更新新增数据,需要将开链时间修改成昨天,闭链时间修改成‘9999-12-31’,etl时间修改成今天
4.3.更新修改前数据,需要将闭链时间修改成昨天,etl时间修改成今天
4.4.更新修改后数据,需要将开链时间修改成今天,闭链时间修改成‘9999-12-31’,etl时间修改成今天
ps:4.3闭链时间何4.4的开链闭链时间需要形成一个闭合时间
5、hive里面拉链表获取数据的方式
5.1.创建一个临时表,表结构和拉链表保持一致
5.2.从拉链表里将昨天没有变化的数据追加到临时表里(通过id不等于业务表的id)
5.3.删除的数据,将闭链时间修改成昨天,etl时间修改成今天,追加到拉链表里
5.4.新增的数据,增加开链的时间为创建时间,闭链时间为‘9999-12-31’,etl时间修改成今天,追加到拉链表里
5.5.修改前的数据,将闭链时间修改成昨天,etl时间修改成今天,追加到拉链表里
5.6.修改后的数据,将开链时间修改成今天,闭链时间为‘9999-12-31’,etl时间修改成今天,追加到拉链表里