一、概念

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

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

  (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) ”(即两个表进行全字段比较,ND 数据减去 OD 数据)就是当日新增和变化的数据,也就是当天的增量,用“ W_I ”表示;

4、“ (OD-ND) ”(即两个表进行全字段比较,OD 数据减去 ND 数据)为状态到此结束需要封链的数据,用“ W_U ”表示;

5、将“ W_I ”表的内容全部插入到“ 历史表 ”(比ND表和OD表多两个字段(start_date,end_date)) 中,这些是新增记录,start_date为当天,而end_date为max值;

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

拉链表 实际上是一个数据的有效更新处理方法。 在定义了对于该方法支持的几个字段后可以对数据进行处理。

讲解一个加了几个字段的的一种处理方法

模拟场景

1、定义两个临时表,一个为当日全量数据,另一个为需要新增或更新的数据;

CREATE TABLE A_day_full;

CREATE TABLE B;

2、获取当日全量数据

INSERT INTO   A   SELECT (a,b,c,cur_date, max_date) FROM SOURCE_Table

3、抽取新增或有变化的数据,从A临时表到B临时表;

INSERT INTO   B SELECT fieldname  FROM  A WHERE   NOT IN (select fieldname  from A_HIS where end_date='max_date');

4、更新历史表的失效记录的end_date为max值

UPDATE A1  FROM a_his  A1,  B  A2 SET End_Date='current_date' WHERE A1.xx=A2.xx  AND A1.End_Date='max_date';

5、将新增或者有变化的数据插入目标表*/

INSERT INTO A_HIS SELECT * FROM B;

最新文章

  1. (转)Web性能优化方案
  2. Obiee11g变量
  3. Spring-Context的注解实现依赖注入功能
  4. jQuery.extend和jQuery.fn.extend的区别?
  5. 配置jenkins,并把iOS包自动上传至fir.im
  6. javascript学习(一) 异常处理与简单的事件
  7. Service代码示例
  8. Linux编译错误集
  9. 将图片转为ASCII字符画
  10. iOS字符串转化成CGFloat
  11. Yii2 报错Getting unknown property: app\models\Product::
  12. TCP/IP具体解释--UDP数据报中的IP分片
  13. webpack 4.0 中 clean-webpack-plugin 的使用
  14. python发送短信验证码
  15. pom文件miss artifact com.sun:tools:jar:1.5.0:system问题
  16. mybatis-高级结果映射之一对多
  17. Java 修饰符顺序问题
  18. [Visual Studio] 自定义类模板
  19. java struts2入门学习实例--使用struts2快速实现多个文件上传
  20. CentOS环境下jdk安装部署

热门文章

  1. 捕获浏览器的前进、后退事件 window.onhashchange 并区别于点击链接
  2. CodeForces 766D Mahmoud and a Dictionary
  3. 洛谷——P2082 区间覆盖(加强版)
  4. sqlmap os shell解析
  5. BestCoder Round #65 (ZYB's Biology)
  6. WebService的网络协议
  7. [BZOJ 3140] 消毒
  8. 【并查集】星球大战starwar
  9. python基础之数据类型之数字、字符串、列表
  10. js知识-进阶