由于前期分析不到位,导致缓慢变化维表增长速度过快,影响查询性能,
分析发现只是由于一些无关紧要的字段变化产生此类数据,因此,要实现拉链表的瘦化,
例如,有一个表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,创建备份表,
2,清空拉链表
3,插入拉链表
此为通用处理办法,只需要把pk_id,及分组pk_id,a,b,c进行相应替换便可,如果你知道我说的是什么,那你说明了解是怎么回事。
分析发现只是由于一些无关紧要的字段变化产生此类数据,因此,要实现拉链表的瘦化,
例如,有一个表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,创建备份表,
点击(此处)折叠或打开
- create table tt_aa as select * from tb_aa t;
点击(此处)折叠或打开
- truncate table tb_aa;
点击(此处)折叠或打开
-
INSERT INTO tb_aa
-
WITH a AS
-
(SELECT row_number() over(PARTITION BY pk_id ORDER BY t.start_date) rn,
-
t.*
-
FROM tt_aa t),
-
b AS
-
(SELECT g.*,
-
lead(start_date) over(PARTITION BY pk_id ORDER BY start_date) endd
-
FROM (SELECT first_value(rn) over(PARTITION BY pk_id,a,b,c ORDER BY rn rows 1 preceding) rnb,
-
a.*
-
FROM a) g
-
WHERE g.rnb != g.rn - 1)
-
SELECT pk_id,a,b,c,d,e,
-
trunc(start_date),
-
nvl(trunc(endd), to_date(\'30001231\', \'yyyymmdd\')) end_date
-
FROM b;
- COMMIT;
此为通用处理办法,只需要把pk_id,及分组pk_id,a,b,c进行相应替换便可,如果你知道我说的是什么,那你说明了解是怎么回事。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/134308/viewspace-1130953/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/134308/viewspace-1130953/
1274

被折叠的 条评论
为什么被折叠?



