kylin剪枝优化的两种方式
1.衍生维度。
在kylin中,如果某些维度都属于同一种类型,且数量较多,可以考虑做成衍生维度。
衍生维度就是将一批维度做成一张维度表,只在源表中保留这张表的外键,这样预处理的时候,就只会处理这个外键,而不会去处理维度表中的维度,降低cuboid的数量。
衍生维度用于在有效维度内将维度表上的非主键维度排除掉,在查询的时候实时进行聚合。
用衍生维度需要注意的一点是:如果从维度表主键到某个维度表维度所需要的聚合工作量非常大,那就不适合做衍生维度,实时进行聚合的时候会等待过长的时间。
2.使用聚合组
聚合组是一种强大的剪枝工具。系统会按照聚合组去预处理cuboid,不在聚合组或跨组的cuboid都不会产生。
每个分组维度集合均是cube所有维度的一个子集。
所有分组贡献的cuboid就是当前cube所有需要物化的cuboid。
由于聚合组内的维度可以重复,因此不同的聚合组会产生相同的cuboid,kylin引擎会保证他们只物化一次。
在聚合组内,你可以对维度进行以下设置:
1.设置成强制维度。这样该聚合组产生的cuboid都要有这个维度。
打个比方,该聚合组里有a,b,c三个维度,将a设置成强制维度,则该聚合组会产生 a,ab,ac,abc 4种cuboid,
而不会产生b , c , bc 这三个cuboid,减少了3个。
2.设置成层级维度。如果一个聚合组的维度中有层级关系,比如省--市--区--街道,就可以设置层级维度。
层级维度不允许子层级出现的时候父层级不出现,比如,你可以 group by 省,市 但是你不能 group by 市, 也不能 group by 省 ,区
举例,该聚合组有 a b c 三个维度 且设置成层级维度 a>b>c. 则该聚合组会产生 a, ab, abc 三个cuboid
不会产生 b,c,bc,ac 这4个cuboid,减少了4个。
3.设置成联合维度,这些维度要么一起出现,要么都不出现。
举例,该聚合组有 a b c 三个维度,且设置 ab为联合维度,则该聚合组会产生 c,ab,abc 三个cuboid
而不会产生 a,b ,ac,bc, 减少了4个。
                    
                
                
            
        
浙公网安备 33010602011771号