现在银行etl还要做拉链表吗_【ETL】拉链表算法

本文介绍了拉链表的概念,用于记录事物的历史状态变化,以节省存储空间。通过实例展示了如何使用拉链表算法处理银行ETL过程中的数据变化,包括新增和状态结束的操作,并提供了具体的SQL示例。
摘要由CSDN通过智能技术生成

所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

在历史表中对客户的一生的记录可能就这样几条记录,避免了按每一天记录客户状态造成的海量存储的问题:

(NAME)人名 (START-DATE)开始日期 (END-DT)结束日期 (STAT)状态

client              19000101                         19070901                H在家

client              19070901                         19130901                A小学

client              19130901                         19160901                B初中

client              19160901                         19190901                C高中

client              19190901                         19230901                D大学

client              19230901                         19601231                E公司

client              19601231                         29991231               H退休在家

上面的每一条记录都是不算末尾的,比如到19070901,client已经在A,而不是H了。所以除最后一条记录因为状态到目前都未改变的,其余的记录实际上在END-DT那天,都不在是该条记录END-DT那天的状态。这种现象可以理解为算头不算尾。

算法:(拉链表算法其实就是以前遇到过的缓慢变化维的其中一种情况,用存储过程实现的话稍微麻烦点。)

1采集当日全量数据到ND(NewDay)表;

2可从历史表中取出昨日全量数据存储到OD(OldDay)表;

3(ND-OD)就是当日新增和变化的数据,也就是当天的增量,用W_I表示;

4(OD-ND)为状态到此结束需要封链的数据,用W_U表示;

5将W_I表的内容全部插入到历史表中,这些是新增记录,start_date为当天,而end_date为max值;

6对历史表进行W_U部份的更新操作,start_date保持不变,而end_date改为当天,也就是关链操作;

下面为具体例子:

OD(在第一天就等于HIS)

用户标志 状态 开始时间 结束时间

1 1 200712 299901

2 2 200712 299901

3 3 200712 299901

4 4 200712 299901

5 5 200712 299901

ND

用户标志 状态 开始时间 结束时间

1 2 200801 299901

2 2 200801 299901

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值