1 重要但隐藏的概念
kylin的一些概念,文档中不会特别说明,但是如果你想了解Kylin的内部原理时,就必须需要理解。
1.1 什么是Base Cuboid
如一个需要通过kylin计算的hive表的维度为: [A, B, C], 那么[A,B,C]这个整体的维度组合, 就叫做Base cuboid.
1.2 什么是includes数组
一个Aggregation Group(之后简称AGG)是一个所有维度的子集, 这个子集就是一个includes数组,如全集为:
1.3 什么是normal dimension
AGG的includes数组中的维度,会分别设置为各种Select Rules中的维度,那么什么Select Rules都没有参与的维度,就是normal dimension.
2 New AggregationGroup的概念
New AggregationGroup是Kylin在1.5提出的一个新概念, 其实主要就是将各个维度精简功能整合到一起,形成这个feature;
New AggregationGroup能做什么呢?一句话: 它能帮我们有效地,灵活地降维度.
若一个表中有数十个维度,但实际上基于维度组合的查询,只会用其中某几个维度,或者这些维度之前存在某种联系,那么可以通过组合维度的方式,减少生成的cuboid的数量。
New AggregationGroup由3种Select Rules组成, 其中Joint rules是1.5新引入的概念, 另外2种是之前版本就已经存在的.
3种Select Rules列举如下:
Mandatory rule, Hierarchy rules, Joint rules;
本人的原则是, 不写别人讲过的东西。所以上面Select Rules的详细概念,这里不再说了,网上一堆一堆的。
3 AGG的数据结构
设某个Cube的维度为: [A, B, C]这3个维度(按照rowkey的排序), includes为: [A, B], joint为:[A, B];
AggregationGroup类:
-> partialCubeFullMask为: 这个AGG的includes的mask: b0110
-> mandatoryColumnMask: 强制维度的mask;
-> hierarchyMasks: 是一个List<HierarchyMask>;
->HierarchyMask: 设为[A, B, C]
fullMask: 0111 用数字7表示;
allMasks: [b0100, b0110, b0111] //每个元素是一个long: [A, AB, ABC];
dims: [b0100, b0010, b0001] //每个元素是一个long: [A, B, C]
-> hierarchyDimsMask:
把上面的list的所有元素的fullmask都包含进来,形成一个总的hierarchy的long值;
-> joints: List<Long>
每个元素都是单joint设置的所有维度的long值: [3, 6];
-> jointDimsMask:
所有joint维度的long表示: 6;
-> normalDimsMask: long类型, 保留includes中, 非3种rule的维度:
比如为6, 那么就是说A,B,C,D这4个元素, B和C是非3种rule出现的维度;
-> normalDims:
[b0100, b0010, b0001]: normalDimsMask的数组表示;
-> selectRule:
拥有3种rule:每种是一个二维数组(除了强制维度mandatory_dims), 说明另外两个都可以有多个rules;
-> init()
build出各种mask;
4 相关文档:
AGG的官方介绍文档, 但不够"深入":
http://kylin.apache.org/blog/2016/02/18/new-aggregation-group/