Apache Kylin优化篇之联合维度(Joint Dimension)

       kylin作为OLAP查询最好的工具之一,但在kylin构建维度时,会生成很多不必要的维度cube,造成维度爆炸,占用大量的存储空间,为了缓解 Cube 的构建压力,减少生成的 Cuboid 数目,Apache Kylin 引入了一系列的高级设置,帮助用户筛选出真正需要的 Cuboid,本文主要介绍kelin维度优化配置–联合维度(Joint Dimension)。

       在介绍优化之前,先来看一看造成维度爆炸的原因:
例如:有A,B,C,D四个维度,那么构建这样一个4个维度的cube就会产生 2 4 2^4 24(Kylin cube构建生成个数n个维度生成 2 n 2^n 2n个cube)个cube(如图),但是这16个维度在中,我们并不会用到所有的维度。
Apache Kylin优化篇之联合维度(Joint Dimension)_第1张图片
       随着维度数(N)的增加,cube数呈指数增长(KaTeX parse error: Expected group after '^' at position 2: 2^̲),不仅占用大量的存储空间还会延长 Cube 的构建时间。为了缓解 Cube 的构建压力,Apache Kylin 引入了一系列的高级优化设置,达到减少生成的 Cuboid 数目的目的,这些高级设置包括聚合组(Aggregation Group)、联合维度(Joint Dimension)、层级维度(Hierarchy Dimension)和必要维度(Mandatory Dimension)等。

       通过上述案例我们可以看到,仅4个维度就生成了16个cube,其中有很多的维度我们用不到,这这显然不是我们所期望的,我们希望kylin构建cube是尽量的减少不必要的维度生成,那么我们就需要给他设置联合维度(Joint Dimension)。比如在业务中只会出现group by A,B,C 其中A,B,或者B,C等维度都不会出现,那么我们就可设置联合维度为 A,B,C,这样维度就只会构建A,D,C,这样维度就会减少到4个,如图:
Apache Kylin优化篇之联合维度(Joint Dimension)_第2张图片
       在真实案例中,例如:有project_id,dt,gender,age 4个维度,加入查询只会查询project_id,dt,gender,并不会单独查询gender,或者dt维度,那么我们就可以设置project_id,dt,gender 为联合维度,如图:
Apache Kylin优化篇之联合维度(Joint Dimension)_第3张图片
如图,
       聚合组:project_id,dt,gender,age
       联合维度: project_id,dt,gender

       但是如果聚合中查询出现group by project_id,dt ,则没有现成的完全匹配的 Cuboid,Apache Kylin 会通过在线计算的方式,从现有的 Cuboid 中计算出最终结果

你可能感兴趣的:(Kylin)