拉链表的简单介绍

二 28th, 2012

       数据仓库保留了大量的历史数据,对时间维度上的数据分析工作提供了重要的手段。而保留历史数据的最常见的方法就是使用历史拉链表,历史拉链表仅当数据发送变更时,才相应的发生变更,这样就能有效保留历史数据的变动信息,又不会浪费存储空间。

name dw_start_date dw_end_date dw-state
metaboy 20120101 20120131 R(休假)
metaboy 20120131 20120201 T(路途)
metaboy 20120201 30001231 W(工作)

上面每一条记录都不算末尾的,比如20120131,此时我的状态应该是在途中,而不是在休假中。所以最后一条记录状态到目前都未改变,一直都处在工作状态。这种算法也叫算头不算尾。

拉链算法

  • 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改为当天,也就是关链操作;

拉链记历史的一些说明

1  初始化数据导致拉链重复

Offer当前数据出现漏和错数据的情况,为了修复数据,采用从前台拉一次全量数据初始化的历史表。在初始化过程是:将全量数据初始化替换进入P30001231这个分区,将DW_BEING_DATE初始化为GMT_CREATE。

这种做法造成GMT_CREATE与之前存在的历史数据拉链重复。正确的做法应该是,将抽取的全量数据与历史表的P30001231分区数据左关联,如果存在则取P30001231分区的DW_BEGIN_DATE,如果不存在,则取当前的数据日期。

2  采用GP记历史脚本回滚历史出现拉链重复

Offer数据某天漏了数据,为了追回历史数据,直接采用历史程序回滚的方法回滚历史。但回滚的时候没有删除回滚时间之后的历史数据。导致很明细数据又出现了重复的拉链。

当前数据为:

OFFER_ID DW_BEGIN_DATE DW_END_DATE
1 2010-11-1 2010-11-4
1 2010-11-4 2010-11-5
1 2010-11-5 2010-11-7
1 2010-11-7 3000-12-31

下面回滚2010-11-4的数据后,数据变成:

OFFER_ID DW_BEGIN_DATE DW_END_DATE
1 2010-11-1 2010-11-4
1 2010-11-4 2010-12-31
1 2010-11-5 2010-11-7
1 2010-11-7 3000-12-31

拉链表数据获取

SELECT * 
FROM evt_order_hist
WHERE start_dt <= DATE ‘2010-01-02’ AND
        end_dt > DATE ‘2010-01-02’ AND
order_id = ‘20100102’;

拉链表的测试点

1. 数据是否存在重复

     检出处理过数据的分区是否存在重复记录。

2. 数据是否有断裂检查

select t1.*
from  tb_h t1
left outer join tb_h t2
on t1.id=t2.id
and t1.dw_end_date=t2.dw_begin_date
where t1.dw_status <> ‘D’
and t1.dw_end_date< timestamp ‘30001231 23:59:59′
and t2.id is null
and t1.dw_end_date>(处理过数据的日期)
limit 1;

3. 数据是否有拉链重复

select t1.*
from  tb_h t1
inner join tb_h t2
on t1.id=t2.id
where t2.dw_begin_date<t1.dw_end_date
and t2.dw_begin_date>=t1.dw_begin_date
and not (t2.dw_begin_date=t1.dw_begin_date and t2.dw_end_date=t1.dw_end_date)





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51592

订阅本站:http://www.wangyuxiong.com/feed

分类: 技术尝新 海量数据         标签: ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量