百万级的大维表如何做缓慢变化维?

0
已邀请:
2

BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-11-16 回答

首先,你得确定你那些变化的维度是真的需要保留历史的吗?
其次,你得弄明白你那些变化的维度真的是缓慢变化的吗?

基本上,大部分的维度的属性其实都不是需要保留历史的,如果你的需求只是保留历史,而不是为了分析变化,那么就把历史表拆出来,万一用了的时候再用,其他时候不用。如果真是有个别需要分析变化的维度成员,要看变化的频率,如果你的有很多列,按SCD2,每个成员平均一周就要增加一行的话,一年下来,这张表就编程1M*50,脑补一下还是原来你期待的数据级别吗?一种建议是,变得快的,拆出来单独处理,或者把那一列加到FACT Table里面去,维度表不记录变化。对于变得慢的,比如一年变个1-2次的,可以考虑SCD2的标准做法,然后...历史数据你要酌情来看保存多久。还有一种是周期性很强的,比如每个季度就搞一次,就再派生一个带时间键的表。总之,你得根据需求走,这方面要引导客户,很多客户的愿望是维表保留所有历史,然后他们一辈子都不用。
0

天善小编 - 微信直播问题收集 2015-11-16 回答

广州~BI~冬:@老头子,对于ORACLE数据库来说,如果有一个上百万的大维表,每天抽取全量数据,用SCD类型2的策略来保存,一般需要旧表和新表一条一条数据做对比,效率极低,有什么办法去增加效率呢?
老头子:首先百万级的维表要看有多少字段,其次要看需要缓慢变化的有哪些字段,然后只针对这几个字段进行处理即可。具体你说的缓慢,是处理方式问题,基本使用ETL进行缓慢变化处理,不把压力放在数据库中,比如在Datastage里进行合并然后MD5check。
广州~BI~冬:老师的意思是使用专业的ETL工具会比在oracle中效率高?还是效率相当,只是纯粹把压力转向ETL服务器呢??
老头子:意思是把压力转向ETL服务器,自己如果能写出更棒的算法,那是更好,如果没有,就不要把所有压力给数据库,不过这要看系统的性能瓶颈在哪儿,如果瓶颈在ETL,那我们就应该在数据库中处理,这个要分情况来看。

要回复问题请先登录注册