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

       在介绍优化之前,先来看一看造成维度爆炸的原因:
例如:有A,B,C,D四个维度,那么构建这样一个4个维度的cube就会产生242^4(Kylin cube构建生成个数n个维度生成2n2^n个cube)个cube(如图),但是这16个维度在中,我们并不会用到所有的维度。
Apache Kylin优化篇之联合维度(Joint Dimension)
       随着维度数(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)
       在真实案例中,例如:有project_id,dt,gender,age 4个维度,加入查询只会查询project_id,dt,gender,并不会单独查询gender,或者dt维度,那么我们就可以设置project_id,dt,gender 为联合维度,如图:
Apache Kylin优化篇之联合维度(Joint Dimension)
如图,
       聚合组:project_id,dt,gender,age
       联合维度: project_id,dt,gender

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

相关文章:

  • 2022-01-02
  • 2021-05-23
  • 2021-07-20
  • 2021-11-01
  • 2021-08-16
  • 2021-07-07
  • 2022-12-23
猜你喜欢
  • 2021-10-04
  • 2021-10-30
  • 2021-04-24
  • 2021-06-23
  • 2022-12-23
  • 2021-12-21
相关资源
相似解决方案