一、 OLAP(online analytical processing)
1.1 OLAP(online analytical processing)联机分析处理是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。从各方面观察信息,也就是从不同的维度分析数据,因此OLAP也成为多维分析。
订单id 下单地区 下单品类 下单时间 订单金额
1001 华北 电子 12月 456
1002 华东 食品 11月 489
1003 西南 居家 2月 491
1004 东北 电子 4月 659
1005 西北 宠物 11月 369
1006 华北 食品 12月 159
分析订单金额总和的规律,需要从不同角度去观察
角度1:地区
角度2:品类
角度3:时间
角度4:地区,品类
角度5:地区,品类
角度6:品类,时间
角度7:地区,品类,时间
一共有2^n - 1个角度。
1.2 OLAP类型
- ROLAP(Relational OLAP) 基于关系型数据库,不需要预计算。
- MOLAP(Multidimensional OLAP) 基于多维数据集,需要与计算。
提供SQL接口,select xxx from xx group by 维度;
1.3 OLAP Cube
MOLAP基于多维数据集,一个多维数据集成为一个OLAP Cube.
订单id 下单地区 下单品类 下单时间 订单金额
1001 华北 电子 12月 456
1002 华东 食品 11月 489
1003 西南 居家 2月 491
1004 东北 电子 4月 659
1005 西北 宠物 11月 369
1006 华北 食品 12月 159

1.4 cube(立方体)和cuboid(长方体)
给定一个数据模型,我们可以对其上的所有维度进行聚合,对于N个维度来说,组合的所有可能性共有2n种。对于每一种维度的组合,将度量值做聚合计算,然后将结果保存为一个物化视图,称为Cuboid。所有维度组合的Cuboid作为一个整体,称为Cube。
如:
有一个电商的销售数据集,其中维度包括时间[time]、商品[item]、地区[location]和供应商[supplier],度量为销售额。那么所有维度的组合就有24 = 16种,如下图所示:

一维度(1D)的组合有:[time]、[item]、[location]和[supplier]4种;
二维度(2D)的组合有:[time, item]、[time, location]、[time, supplier]、[item, location]、[item, supplier]、[location, supplier]3种;
三维度(3D)的组合也有4种;
最后还有零维度(0D)和四维度(4D)各有一种,总共16种。
每一种维度组合就是一个Cuboid,16个Cuboid整体就是一个Cube
1.5 Dimension(维度) & Measure(度量)



二、kylin架构

Routing(路由层):默认设置位false。为true时,kylin在hbase查不到数据就从数据源hive去查。
预计算过程:
Kylin从Hive中读取原始数据,按照我们选定的维度进行计算,并将结果集保存到Hbase中,默认的计算引擎为MapReduce,可以选择Spark作为计算引擎。
三、cube存储原理

给distinct维度建字典表。

有该维度就为1,加上维度字典表查到的字典值作为hbase的rowKey,例如:
“北京 电子 2019-01-09 ¥100” 对应的rowKey就是 111+000.
四、cube构建算法
4.1 逐层构建算法(layer)

一个N维的Cube,是由1个N维子立方体、N个(N-1)维子立方体、N*(N-1)/2个(N-2)维子立方体、......、N个1维子立方体和1个0维子立方体构成,总共有2^N个子立方体组成,在逐层算法中,按维度数逐层减少来计算,每个层级的计算(除了第一层,它是从原始数据聚合而来),是基于它上一层级的结果来计算的。比如,[Group by A, B]的结果,可以基于[Group by A, B, C]的结果,通过去掉C后聚合得来的;这样可以减少重复计算;当 0维度Cuboid计算出来的时候,整个Cube的计算也就完成了。
每一轮的计算都是一个MapReduce任务,且串行执行;一个N维的Cube,至少需要N次MapReduce Job。

可以看到每一轮都有一个MR任务,N维对应至少N个MR job
4.2 快速构建算法

每个Mapper将其所分配到的数据块,计算成一个完整的小Cube 段(包含所有Cuboid)。每个Mapper将计算完的Cube段输出给Reducer做合并,生成大Cube,也就是最终结果。如下图

五、cube构建优化
5.1使用衍生维度(derived dimension)
衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们。Kylin会在底层记录维度表主键与维度表其他维度之间的映射关系,以便在查询时能够动态地将维度表的主键“翻译”成这些非主键维度,并进行实时聚合。

并不是说所有维度表上的维度都得变成衍生维度,如果从维度表主键到某个维度表维度所需要的聚合工作量非常大,则不建议使用衍生维度。
5.2 使用聚合组(Aggregation group)
5.3 Row Key优化
5.4 并发粒度优化
六、zepplin使用
zepplin和jupyter有很相似的使用方法