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

目录

 

拉链定义

拉链表数据存储方式

拉链的意义

拉链算法详解


拉链定义

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

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

  • 快照存储
  • 拉链存储

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

 

业务系统2014年1月1日的数据
账户ID户名余额
001张三2000
业务系统2014年1月15日的数据
账户ID户名余额
001张三2000
业务系统2014年2月1日的数据
账户ID户名余额
001张三4000

 以上是账户ID001户名为张三的业务数据,分别用俩种历史数据存储方式来存储。

快照存储方式如下:

快照存储方式
账户ID户名余额数据日期
001张三20002014-01-01
001张三20002014-01-15
001张三40002014-02-01

 

拉链存储方式如下:

拉链存储方式
账户ID户名余额开始日期结束日期
001张三20002014-01-012014-02-01(闭链)
001张三40002014-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';

 

 

 

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值