【ETL】拉链表算法

来源:互联网 发布:淘宝会员抓取导入系统 编辑:程序博客网 时间:2024/04/28 09:33

拉链表算法

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

 

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

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
3             4    200801      299901
4             4    200801      299901
5             6    200801      299901

W_I=ND-OD
用户标志    状态开始时间结束时间
1             2  200801         299901
3             4   200801        299901
5             6   200801         299901

W_U=OD-ND
用户标志   状态开始时间结束时间
1            1  200712            299901
3            3   200712          299901
5            5   200712          299901

INSERT操作把I插入到HIS
用户标志   状态开始时间结束时间
1            1  200712          299901
2            2   200712           299901
3            3   200712           299901
4            4   200712           299901
5            5   200712           299901
1            2   200801          299901
3            4   200801          299901
5                     6  200801         299901

update操作按U更新HIS
用户标志    状态开始时间结束时间
1               1  200712   200801
2               2   200712  299901
3               3   200712  200801
4               4   200712   299901
5               5   200712  200801
1               2   200801  299901
3               4   200801  299901
5               6   200801  299901

 转自http://blog.csdn.net/paopaomm/article/details/7491400

0 0
原创粉丝点击