您的位置:首页 > 其它

【ETL】拉链表算法

2015-10-05 18:07 309 查看

拉链表算法

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

算法:(拉链表算法其实就是以前遇到过的缓慢变化维的其中一种情况,用存储过程实现的话稍微麻烦点。)
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: