CC00021.kylin——|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子句中的维度
~~~     层级维度:一组具有层级关系的维度(如:国家、省、市)
~~~     联合维度:将多个维度看成一个维度。要么一起出现、要么都不出现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值