`

数据仓库之拉链算法(转)

阅读更多

 数据仓库之拉链算法(转)
链:古代软兵器的中介之物,故名思意.有着连接、衔接的意思.拉链算法是目前数据仓库领域比较XX的算法之一..通用非常广.记录数据量很大且为全量实体记录历史的操作。

例如,某某移动通信公司客户资料,以河北为例,河北有客户2800W,客户资料每个一条就是2800W条记录算上历史客户,全量大概有5000W条左右。作为数据仓库来存储这些信息几千万条记录不算什么。可是要是记录历史全量所用到的存储就非常的庞大。问题实例为:一般正常情况下,从河北移动的BOSS系统上每天采集全量的日数据大概为2500W条,历史存储每天存储一个2500W条的日表,存储三个月,就需要3*30*2500W条的数据存储空间,数据量为20E。这只是存储三个月的历史如果存储更长时间则无法估计需要的存储。而用拉链算法存储。每日只是向历史表(HIS)中添加新增和变化的数据量。每日不过数十W条。存储一年也就是需要5000W条记录的存储空间即两个日全量的空间。下面详细介绍下拉链算法:
1.采集当日全量存储到 ND(NewDay) 表中。(比正常的全量表多两个字段(START_DATE&END_DATE))
2.可从历史表中取出昨日全量数据存储到 OD(OldDay)表中。(比正常的全量表多两个字段(START_DATE&END_DATE))
3.用ND-OD为当日新增和变化的数据(即每日增量)。
4.用OD-ND为状态到此结束需要封链的数据。
5.历史表(HIS)比ND表和OD表多两个字段(START_DATE&END_DATE)
6.针对第三部来讲,ND和OD表的(START_DATE&END_DATE)分别记录当前日期和最大日期,取意为开始日期为当前天的数据和结束日期为最大日期。注意OD和ND的START_DATE
ND——OD两个表进行全字段比较但是(START_DATE&END_DATE)除外。将结果记录到W_I表中
OD——ND两个表进行全字段比较同样(START_DATE&END_DATE)除外。将结果记录到W_U表中
7.将W_I表的内容全部插入到HIS表中。
8. 对历史表(HIS)和OD表比较对历史表最更新操作即在历史表(HIS)中数据进行更新操作以W_U表为准,即对历史表与W_U比对(START_DATE&END_DATE除外),在历史表(HIS)中也在W_U表中的数据将其END_DATE改成当前天,说明该记录对当前天失效。
9。取数据时候对日期进行条件选择即可如:取20080101日的数据条件部分为
(where start-date<='20080101' and end_date>20070801 )即可
全部SQL为:
(select * from table(his) where start-date<='20080101' and end_date>20070801 )
下面为具体例子:
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
 
表结构设计之拉链表
(一)概念
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

在历史表中对客户的一生的记录可能就这样几条记录,避免了按每一天记录客户状态造成的海量存储的问题:
(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改为当天,也就是关链操作;

分享到:
评论

相关推荐

    ETL拉链算法的使用

    ETL拉链算法的使用,详细介绍各种拉链算法的使用,及开发过程

    数据结构C++实验报告拉链法哈希表查找算法合工大

    合工大数据结构C++实验报告拉链法哈希表查找算法

    数据仓库拉链表

    在数据分析中有时会需要维护一些历史状态,比如订单状态变化,评分变化,为了保存下来这些状态变化的路径,可以同过拉链表实现 -- 使用场景 1、数据量比计较大,但业务要求每次需要查询全量历史,每天存储一份全量...

    Datastage实现拉链算法.doc

    Datastage实现拉链算法.doc

    ETL拉链算法以及简单个人理解

    ETL拉链算法以及简单个人理解

    数据仓库中的拉链表-Clickhouse实现.pdf

    传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足够高的情形下能正常提供服务。但残酷的是,这种理想情形最终会随着业务的增长走到尽头,查询会变得越来越慢。你可能通过增加更多的内存,订购更快的...

    数据结构和算法动画演示

    数据结构和算法Flash动画演示 顺序查找 顺序栈(4个存储空间) 顺序栈(8个存储空间) 顺序表的删除运算 顺序表的插入 顺序队列操作 二分查找 分块查找 三元组表的转置 串的顺序存储 单链表结点的插入 单链表结点的...

    Flash动画演示 数据结构和算法

    拉链法创建散列表.swf 拓扑排序.swf 最短路径.swf 朴素串匹配算法过程示意.swf 构造哈夫曼树的算法模拟.swf 构造哈夫曼树过程.swf 栈与递归.swf 树、森林和二叉树的转换.swf 桶式排序法.swf 直接插入排序.swf 直接...

    数据结构算法\哈希表开放地址法解决冲突

    数据结构算法\哈希表开放地址法解决冲突

    关于拉链长度的算法..doc.doc

    关于拉链长度的算法..doc.doc

    拉链表重复跑数据错误解决.docx

    拉链表重复跑数据错误解决

    介绍数据表的拉链示例。

    介绍数据表的拉链示例。

    数据结构和算法Flash动画演示

    循环队列操作演示,快速排序,拉链法创建散列表,拓扑排序,最短路径,朴素串匹配算法过程示意,构造哈夫曼树的算法模拟,构造哈夫曼树过程,栈与递归,树、森林和二叉树的转换,桶式排序法,直接插入排序,直接选择...

    java 时间片算法

    java 时间片算法 发生的泥泞i萨芬第几集

    算法-第4版-完整版

    算法(第四版) 目录: 第1章 基础 1 1.1 基础编程模型 4 1.1.1 Java程序的基本结构 4 1.1.2 原始数据类型与表达式 6 1.1.3 语句 8 1.1.4 简便记法 9 1.1.5 数组 10 1.1.6 静态方法 12 1.1.7...

    《算法》中文版,Robert Sedgewick,塞奇威克

     《算法(第4版)》全面讲述算法和数据结构的必备知识,具有以下几大特色。  1、 算法领域的经典参考书:Sedgewick畅销著作的*版,反映了经过几十年演化而成的算法核心知识体系  2、内容全面:全面论述排序、搜索...

    算法 第4版 高清中文版

    算法(第4版)》是Sedgewick之巨著,与高德纳TAOCP一脉相承,是算法领域经典的参考书,涵盖所有程序员必须掌握的50种算法,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了...

    程序员实用算法——源码

     3.3.3 外部拉链法  3.4 性能问题  3.5 资源和参考资料 第4章 查找  4.1 查找的特征  4.1.1 准备时间  4.1.2 运行时间   4.1.3 回溯的需要  4.2 蛮力查找  4.3 Boyer Moore查找  4.3.1 启发...

    基于三角形匹配的星图识别算法及优化

    但随之增加的大量运算降低了算法运行效率,因此新算法在最核心三角形匹配中构造了哈希表,并将待匹配星对按照星角距排序运用二分查找极大程度减少了特征量的比较次数,一改经典算法中遍历的低效。同时巧妙利用导航星...

    算法 第4版-谢路云译-带完整书签

    3.4.2 基于拉链法的散列表 297 3.4.3 基于线性探测法的散列表 300 3.4.4 调整教组大小 304 3.4.5 内存使用 306 3.5 应用 312 3.5.1 我应该使用符号表的哪种实现 312 3.5.2 集合的API 313 3.5.3 字典...

Global site tag (gtag.js) - Google Analytics