【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
相关文章推荐
- 对象——基本概念
- 比较幸运的收到了两份offer
- 国际版路由器
- Kafka命令
- 【总结】Java基础总结⑺
- 构建高性能WEB之HTTP首部优化
- 回顾spring(云计算项目)
- unity官方demo学习之Stealth(二十二)敌人动画控制
- 【总结】Java基础总结⑹
- acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
- [Python进阶-2]模块和包的复习,以及第三方模块的安装
- Bridge(桥接)设计模式
- 编程语言汉英翻译
- Kafka集群文档
- leetcode题目 旋转排序数列的查找
- 测试自定义随笔样式
- Java序列化的机制和原理
- 算法-低位优先的字符串排序
- Gson解析(6)——注册TypeAdapter及处理Enum类型
- iOS编程--------UIControl的作用及其子类UISegmentedControl的使用 / UISlider的使用 / UIImageView的使用