天天看点

数据仓库ETL算法之拉链算法

目录

拉链定义

拉链表数据存储方式

拉链的意义

拉链算法详解

拉链定义

  • 现实社会:拉链是依靠排列的链牙,使物品并合或分离的连接件
  • 数据仓库:记录数据在某一时间内的状态以及数据在某一时点上的变化的数据存储方式,也是应需求产生的技术解决方案

历史存储数据的俩种方式:

  • 快照存储
  • 拉链存储

下面用一组业务数据来解释俩者区别:

业务系统2014年1月1日的数据

账户ID 户名 余额
001 张三 2000

业务系统2014年1月15日的数据

账户ID 户名 余额
001 张三 2000

业务系统2014年2月1日的数据

账户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)

新增数据:即主键新增,直接开链

数据仓库ETL算法之拉链算法

拉链表数据存储方式

数据存储方式--删除

主键(账户ID)

删除数据:即数据删除,直接关链

数据仓库ETL算法之拉链算法

数据存储方式--修改

主键(账户ID)

修改数据:即属性字段的更新,先关链,再开链

数据仓库ETL算法之拉链算法

拉链的意义

  • 节省存储空间
  • 记录数据变化

拉链算法详解

数据仓库ETL算法之拉链算法

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;
           
数据仓库ETL算法之拉链算法

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');
           
数据仓库ETL算法之拉链算法

3.修改目标表,进行关联更新操作

update TAG
set END_DT = '2014-01-04'
where END_DT = '2999-12-31' and ID in(select ID from VT_INC)
           
数据仓库ETL算法之拉链算法

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';
           
数据仓库ETL算法之拉链算法