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

 数据仓库之拉链算法(转) 链:古代软兵器的中介之物,故名思意.有着连接、衔接的意思.拉链算法是目前数据仓库领域比较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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值