瘦化拉链表

由于前期分析不到位,导致缓慢变化维表增长速度过快,影响查询性能,
分析发现只是由于一些无关紧要的字段变化产生此类数据,因此,要实现拉链表的瘦化,
例如,有一个表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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/134308/viewspace-1130953/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值