目录
拉链定义
拉链表数据存储方式
拉链的意义
拉链算法详解
拉链定义
- 现实社会:拉链是依靠排列的链牙,使物品并合或分离的连接件
- 数据仓库:记录数据在某一时间内的状态以及数据在某一时点上的变化的数据存储方式,也是应需求产生的技术解决方案
历史存储数据的俩种方式:
- 快照存储
- 拉链存储
下面用一组业务数据来解释俩者区别:
账户ID | 户名 | 余额 |
001 | 张三 | 2000 |
账户ID | 户名 | 余额 |
001 | 张三 | 2000 |
账户ID | 户名 | 余额 |
001 | 张三 | 4000 |
以上是账户ID001户名为张三的业务数据,分别用俩种历史数据存储方式来存储。
快照存储方式如下:
账户ID | 户名 | 余额 | 数据日期 |
001 | 张三 | 2000 | 2014-01-01 |
001 | 张三 | 2000 | 2014-01-15 |
001 | 张三 | 4000 | 2014-02-01 |
拉链存储方式如下:
账户ID | 户名 | 余额 | 开始日期 | 结束日期 |
001 | 张三 | 2000 | 2014-01-01 | 2014-02-01(闭链) |
001 | 张三 | 4000 | 2014-02-01(开链) | 2999-12-31 |
数据存储方式--新增
主键(账户ID)
新增数据:即主键新增,直接开链

拉链表数据存储方式
数据存储方式--删除
主键(账户ID)
删除数据:即数据删除,直接关链
数据存储方式--修改
主键(账户ID)
修改数据:即属性字段的更新,先关链,再开链
拉链的意义
- 节省存储空间
- 记录数据变化
拉链算法详解
1.建立临时表VT_NEW用于存放转换、处理后的数据
create table VT_NEW as select * from TAG where 1=0;
insert into VT_NEW(ID,NAME,BAL,START_DT,END_DT)
select ID,NAME,BAL,'2014-01-04','2999-12-31'
from SRC;
2.建立临时表VT_INC用于存放比对出的增量数据
create table VT_INC as select * from TAG where 1=0;
insert into VT_INC(ID,NAME,BAL,START_DT,END_DT)
select ID,NAME,BAL,START_DT,END_DT
from VT_NEW
where (ID,NAME,BAL) not in(
select ID,NAME,BAL
from TAG
where END_DT = '2999-12-31');
3.修改目标表,进行关联更新操作
update TAG
set END_DT = '2014-01-04'
where END_DT = '2999-12-31' and ID in(select ID from VT_INC)
4.修改目标表,进行开链插入操作
insert into TAG(ID,NAME,BAL,START_DT,END_DT)
select ID,NAME,BAL,START_DT,END_DT
from VT_INC where END_DT <>'1990-01-02';