ITPub博客

首页 > 大数据 > 数据挖掘 > 瘦化拉链表

瘦化拉链表

原创 数据挖掘 作者:piliskys 时间:2014-03-27 17:29:06 0 删除 编辑
由于前期分析不到位,导致缓慢变化维表增长速度过快,影响查询性能,
分析发现只是由于一些无关紧要的字段变化产生此类数据,因此,要实现拉链表的瘦化,
例如,有一个表tb_aa(pk_id,a,b,c,d,e,start_date,end_date),pk_id是源表主键,原先是根据a,b,c,d,e这些字段做的拉链,导致数据量过大,
目前通过分析,只需要a,b,c进行捕获变化进行拉链处理,因此,更改ETL程序同时,对历史数据进行处理,处理方式如下(oracle数据库)
1,创建备份表,

点击(此处)折叠或打开

  1. create table tt_aa as select * from tb_aa t;
2,清空拉链表

点击(此处)折叠或打开

  1. truncate table tb_aa;
3,插入拉链表

点击(此处)折叠或打开

  1. INSERT INTO tb_aa
  2.       WITH a AS
  3.        (SELECT row_number() over(PARTITION BY pk_id ORDER BY t.start_date) rn,
  4.                t.*
  5.         FROM tt_aa t),
  6.       b AS
  7.        (SELECT g.*,
  8.                lead(start_date) over(PARTITION BY pk_id ORDER BY start_date) endd
  9.         FROM (SELECT first_value(rn) over(PARTITION BY pk_id,a,b,c ORDER BY rn rows 1 preceding) rnb,
  10.                        a.*
  11.                 FROM a) g
  12.         WHERE g.rnb != g.rn - 1)
  13.       SELECT pk_id,a,b,c,d,e,
  14.              trunc(start_date),
  15.              nvl(trunc(endd), to_date(\'30001231\', \'yyyymmdd\')) end_date
  16.       FROM b;
  17.     COMMIT;

此为通用处理办法,只需要把pk_id,及分组pk_id,a,b,c进行相应替换便可,如果你知道我说的是什么,那你说明了解是怎么回事。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/134308/viewspace-1130953/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-14

  • 博文量
    68
  • 访问量
    164800