(一)概念
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。
在历史表中对客户的一生的记录可能就这样几条记录,避免了按每一天记录客户状态造成的海量存储的问题:
(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改为当天,也就是关链操作;
(三)一个实际例子(teradata)
1、定义两个临时表,一个为当日全量数据,另一个为需要新增或更新的数据;
CREATE VOLATILE TABLE VT_xxxx_NEW AS xxxx WITH NO DATA ON COMMIT PRESERVE ROWS;
CREATE VOLATILE SET TABLE VT_xxxx_CHG,NO LOG AS xxxx WITH NO DATA ON COMMIT PRESERVE ROWS;
2、获取当日全量数据
INSERT INTO VT_xxxx_NEW(xx) SELECT (xx,cur_date, max_date) FROM xxxx_sorce; ND
3、抽取新增或有变化的数据,从xxxx_NEW临时表到xxxx_CHG临时表;
INSERT INTO VT_xxxx_CHG(xx)
SELECT xx FROM VT_xxxx_NEW
WHERE (xx) NOT IN (select xx from xxxx_HIS where end_date='max_date');
4、更新历史表的失效记录的end_date为max值
UPDATE A1 FROM xxxx_HIS A1, VT_xxxx_CHG A2
SET End_Date='current_date'
WHERE A1.xx=A2.xx AND A1.End_Date='max_date';
5、将新增或者有变化的数据插入目标表*/
INSERT INTO xxxx_HIS SELECT * FROM VT_xxxx_CHG;
分享到:
相关推荐
拉链表.sql
拉链表案例 - 完整.pdf
拉链表的使用
-- 拉链表介绍 在数据分析中有时会需要维护一些历史状态,比如订单状态变化,评分变化,为了保存下来这些状态变化的路径,可以同过拉链表实现 -- 使用场景 1、数据量比计较大,但业务要求每次需要查询全量历史,...
拉链表重复跑数据错误解决
拉链表更新方式二(exists) --优先.sql
拉链表案例 - 完整.zip
Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS)。 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务。但残酷的是,这种理想情形最终会...
拉链表_行转列_row.sql
深入讲解拉链表,还怕面试官问?.docx
行业分类-设备装置-一种金属拉链表面切削机
用java写的拉链法实现哈希表的建立,应用到类似于电话本查询的程序里,课程设计时候做的,所以不是很完美
合工大数据结构C++实验报告拉链法哈希表查找算法
新颖拉链彩色简历Word模板表.doc
关于拉链长度的算法..doc.doc
易语言源码易语言拉链法哈希表源码.rar 易语言源码易语言拉链法哈希表源码.rar 易语言源码易语言拉链法哈希表源码.rar 易语言源码易语言拉链法哈希表源码.rar 易语言源码易语言拉链法哈希表源码.rar 易语言源码...
拉链hash是最常用有最有效的hash表,本历程是外联hash表。
介绍数据表的拉链示例。