简介
Kylin作为一个OLAP引擎,需要Cube模型支撑,在我们的工作过程中,在和用户以及相关的开发人员、测试、产品等介绍Kylin的过程中,他们总是会对Cube的模型有一些疑惑,作为经常接触这个概念的我来说这是再明了不过的了,而他们还是会在我讲解多次之后表示还在云里雾里,所以就希望通过一篇关于Cube和Kylin创建Cube的过程来聊一下Cube是什么,以及Kylin的一些高级设置。
Cube
一个Cube(多维立方体)其实就是一个多维数组,例如定义一个三维数组int array[M][N][K],每一个维度分别有M、N和K个成员,同样对于一个Cube而言,也可以有三个维度,假设分别为time、location和product,每一个维度的distinct值(称为维度的cardinality)分别是M、N和K个,而数组中的每一个值则是每一个维度取一个值对应的聚合结果,例如array[0][1][2],它就相当于time取第一个值(假设为2016-01-01),location取第二个值(假设为HangZhou)、product取第三个值(假设为Food)对应的一个聚合结果,假设这里的聚合函数为COUNT(1),那么求得的值相当于执行了SELECT COUNT(1) from table where time = ‘2016-01-01’ and location = ‘HangZhou’ and product = ‘Food’,这样当我们有多个聚合函数呢,那么就相当于数组中的每一个元素是一个包含多个值的结构体:
struct{
int count; //保存COUNT(1)的值
double sales; //保存SUM(sales)的值
double cost; //保存SUM(cost)的值
}