|NO.Z.00021|——————————|BigDataEnd|——|Hadoop&OLAP_Kylin.V21|——|Kylin.v21|Cube优化|聚合组|强制/层级/联合维度|
一、聚合组
### --- 聚合组
~~~ 随着维度数目的增加,Cuboid 的数量会爆炸式地增长。
~~~ 为了缓解 Cube 的构建压力,Apache Kylin 引入了一系列的高级设置,
~~~ 帮助用户筛选出真正需要的 Cuboid(本质是要减少Cube构建过程中的预计算)。
### --- 这些高级设置包括:
~~~ 聚合组(Aggregation Group)
~~~ 强制维度(Mandatory Dimension)
~~~ 层级维度(Hierachy Dimension)
~~~ 联合维度(Joint Dimension)
二、查看cube在构建过程中聚合组的参数配置

### --- 默认 Kylin 会把所有维度放在同一个聚合组中。
~~~ 如果维度数较多(如维度数 > 15),建议用户根据查询的习惯和模式,将维度分布到多个聚合组中。
~~~ 通过使用多个聚合组,可以大大降低 Cube 中的 Cuboid 数量。
### --- 如一个Cube有 (M+N) 个维度:
~~~ 这些维度放在一个聚合组中,默认有 2^(M+N) 个 Cuboid
~~~ 将这些维度分为两个不相交的聚合组,第一个组有M个维度,第二个组有N个维度。
~~~ 那么 Cuboid 的总数为:( 2^M + 2^N )个维度
~~~ 一个维度可以出现在多个聚合组中
### --- 单个聚合组中
~~~ 在单个聚合组中,可以对维度设置一些高级属性,包括强制维度、层级维度、联合维度。
~~~ 一个维度只能出现在一个属性组中。
~~~ 构建 N 个维度的 Cube 会生成 2^N个 Cuboid。
三、聚合组维度说明
### --- 聚合组维度说明
~~~ 如下图所示,构建一个 4 个维度(A,B,C, D)的 Cube,需要生成 16 个Cuboid。

~~~ 根据用户关注的维度组合,可以维度划分不同的组合类,这些组合类在 Kylin 中被称为聚合组。
~~~ 如用户仅仅关注维度 AB 组合和维度 CD 组合,那么该 Cube 则可以被分化成两个聚合组,
~~~ 分别是聚合组 AB 和聚合组 CD。
~~~ 生成的 Cuboid 数目从 16 个缩减为 8 个。

~~~ 用户关心的聚合组之间可能包含相同的维度。如聚合组 ABC 和聚合组 BCD 都包含维度 B 和维度 C。
~~~ 这些聚合组之间会衍生出相同的 Cuboid。
~~~ 聚合组 ABC 会产生 Cuboid BC,聚合组 BCD 也会产生 Cuboid BC。
~~~ 这些 Cuboid不会重复生成,一份 Cuboid 为这些聚合组所共有。

~~~ 有了聚合组就可以粗粒度地对 Cuboid 进行筛选,获取自己想要的维度组合。
~~~ Kylin的建模需要业务专家参与。
三、强制维度(Mandatory Dimension)
### --- 强制/必要 维度:
~~~ 指的是那些总会出现在 Where 条件或 Group By 语句中的维度。
~~~ 通过指定某些维度为强制维度,Kylin 不预计算那些不包含此维度的 Cuboid ,从而减少计算量。
~~~ 维度A是强制维度,那么生成的 Cube 如下图所示,维度数目从16变为9。

四、层级维度(Hierachy Dimension)
### --- 层级维度:
~~~ 是指一组有层级关系的维度。
~~~ 维度中常常会出现具有层级关系的维度。
~~~ 例如国家、省份、城市这三个维度,从上而下来说国家/省份/城市之间分别是一对多的关系。
~~~ 假设维度 A 代表国家,维度 B 代表省份,维度 C 代表城市,
~~~ ABC 三个维度可以被设置为层级维度,生成的Cube 如下图所示:
~~~ Cuboid [A,C,D]=Cuboid[A, B, C, D],Cuboid[B, D]=Cuboid[A, B, D],
~~~ 因而 Cuboid[A, C, D] 和 Cuboid[B, D] 就不必重复存储。

五、联合维度(Joint Dimension)
### --- 联合维度:
~~~ 是将多个维度视作一个维度,在进行组合计算的时候,它们要么一起出现,要么均不出现。
~~~ # 通常适用于以下几种情形:
~~~ 总是在一起查询的维度
~~~ 彼此之间有一定映射关系,如USER_ID和EMAIL
~~~ 基数很低的维度。如性别、布尔类型的属性
### --- 维度的基数:
~~~ 维度有多少个不同的值。
~~~ 联合维度并不关心维度之间各种细节的组合方式。
~~~ 如用户的查询语句中仅仅会出现 group by A, B, C,
~~~ 而不会出现 group by A、B 或者 group by C 等等这些细化的维度组合。
~~~ 这一类问题就是联合维度所解决的问题。
### --- 例如将维度 A、B、C 定义为联合维度,
~~~ Apache Kylin 就仅仅会构建 Cuboid ABC,而 Cuboid AB、BC、A 等等Cuboid 都不会被生成。
~~~ 最终的 Cube 结果如下图所示,Cuboid 数目从 16 减少到 4。

六、小结:
### --- 小结:
~~~ 在单个聚合组中,可以对维度进行设置,包括强制维度、层级维度、联合维度。
~~~ 一个维度只能出现在一个属性组中
~~~ 强制维度:指的是那些总会出现在Where条件或Group By子句中的维度
~~~ 层级维度:一组具有层级关系的维度(如:国家、省、市)
~~~ 联合维度:将多个维度看成一个维度。要么一起出现、要么都不出现
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv023-kylin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」