`

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

阅读更多

 数据仓库之拉链算法(转)
链:古代软兵器的中介之物,故名思意.有着连接、衔接的意思.拉链算法是目前数据仓库领域比较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工具算法构建企业级数据仓库五步法.docx

    ETL工具算法构建企业级数据仓库五步法是指通过五个步骤来构建企业级数据仓库,即确定主题、设计数据仓库架构、构建ETL流程、构建数据仓库和维护数据仓库。 第一步:确定主题。确定主题是构建数据仓库的第一步,它是...

    Datastage实现拉链算法.doc

    在数据仓库设计中,拉链算法是一种处理缓慢变化维度的有效方法。拉链表的概念是为了解决数据的历史版本记录以及减少存储开销,它记录了某个实体从开始到当前状态的所有变化。本文将探讨如何在Datastage中实现拉链...

    ETL拉链算法的使用

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

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

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

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

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

    数据仓库拉链表

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

    常用大数据量,海量数据处理方法,算法总结

    海量数据处理方法总结 本文总结了常用的海量数据处理方法,包括 Bloom filter、Hashing 和 bit-map 等。这些方法可以用来解决大数据量的问题,例如数据字典、判重、集合求交集等问题。 Bloom Filter Bloom filter...

    介绍数据表的拉链示例。

    数据表的拉链示例主要涉及的是数据仓库中的数据存储策略,特别是对于历史数据管理和变更追踪的一种重要技术。拉链(Change Data Capture, CDC)是一种处理数据变更的方式,它允许我们跟踪和存储数据随时间的变化,...

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

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

    大数据实战Demo系统-MaxCompute数据仓库数据转换实践.pdf

    总之,这份报告详细解读了大数据实战中MaxCompute数据仓库在数据转换中的具体实施步骤,包括数据架构设计、ETL策略选择以及特定算法的应用,对于理解大数据处理流程和优化数据仓库管理具有很高的参考价值。

    数据结构算法【啊哈、java数据算法与结构等】

    在这个完整的资料包"数据结构算法【啊哈、java数据算法与结构等】"中,我们聚焦于如何使用Java语言来实现各种数据结构和算法。啊哈算法通常指的是那些具有独特洞察力或巧妙解法的算法,它们能提供解决问题的新视角。...

    Greenplum数据仓库设计规范1

    数据仓库通常按照ODS(数据接入层)、CDM(公共数据层)、DWD(数据明细层)、DWS(数据汇总层)、DWH(历史数据层)、ZT(拉链层)、AC(归档层)等层次进行组织。每个层次有特定的功能,如ODS层主要存放原始数据,...

    数据结构和算法动画演示

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

    自动生成拉链程序.rar_仓库 拉链 VBA

    【标题】"自动生成拉链程序.rar_仓库 拉链 VBA"指的是一个使用VBA(Visual Basic for Applications)编程语言编写的自动化程序,它主要用于处理仓库数据,特别是涉及拉链(Zipping)操作的场景。在IT行业中,拉链...

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

    Hive 是一个基于 Hadoop 的数据仓库工具,主要用于数据分析和报表生成。在 Hive 中,拉链表是一种常见的数据结构,用于存储历史数据。但是,在拉链表中重复跑数据时,可能会出现数据错误的问题。本文将提供四种解决...

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

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

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

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

    拉链表的使用.docx

    拉链表是一种数据存储方式,在数据仓库中记录数据在某一时间区间内的状态以及数据在某一时间点上的数据变化。拉链技术的出现是为了解决数据仓库中大量重复冗余数据的问题。通过使用拉链表,既可以节约存储空间,又...

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

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

Global site tag (gtag.js) - Google Analytics