Kylin的工作原理本质上是MOLAP(Multidimensional Online Analytical Processing) Cube,也就是多维立方体分析。
在说明MOLAP Cube之前先介绍 维度(Dimension) 和 度量(Measure) 这两个概念。
- 维度:
被group by的字段
,观察数据的角度,正常是时间,地点等不用于计算的值;- 度量:
被sum等聚合的字段
,指被聚合的统计值,也就是聚合运算的结果,可以是销售额,销售商品数量等统计值。
- 给定一个数据模型,可以对其上的所有维度进行组合。对于N个维度来说,组合的所有可能性共有2^N种。
- 对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为Cuboid。
- 所有维度组合的Cuboid作为一个整体,成为Cube,所以简单来说,一个Cube就是许多按维度聚合的物化视图的集合。
举一个例子解释一下上面的说法:
假设有一个电商的销售数据集,其中有4个维度和一个度量,维度为时间(Time)、地点(Location)、商品(Item)和供应商(Supplier),度量为销售额(GMV)。那么所有维度就有2^4=16种(如图),比如一维度(1D)的组合有[Time]、[Item]、[Location]、[Supplier] 4种;二维度(2D)的组合有[Time, Item]、[Time, Location]、[Time, Supplier]、[Item, Location]、[Item, Supplier]、[Location, Supplier] 6种;三维度(3D)的组合也有4种;最后零维度(0D)和四维度(4D)的组合各有1种,总共16种。
计算Cuboid,即按维度来聚合销售额。
如果用SQL语句来表达计算Cuboid[Time, Location],那么SQL语句如下:Select Time, Location, Sum(GMV) as GMV from Sales group by Time, Location
;
将计算的结果保存为物化视图,所有Cuboid物化视图的总称就是Cube。
Kylin的工作原理就是对数据模型做Cube预计算,并利用计算的结果加速查询,具体过程如下:
- 指定数据模型,定义维度和度量。
- 预计算Cube,计算所有Cuboid并保存为物化视图。
- 执行查询时,读取Cuboid,运算,产生查询结果。
事实表和维度表
事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录、传感器数值等;事实表的记录是动态增长的,所以它的体积通常远大于维度表。
维度表(Dimension Table)或维表,也成为查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地区表(包含国家、省/州、城市等属性)等。维度表的变化通常不会太大。使用维度表有许多好处:
- 缩小了事实表的大小。
- 便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。
- 维度表可以为多个事实表重用。
星形模型
- 星形模型(Star Schema)是数据挖掘中常用的几种多维数据模型之一。它的特点是只有一张事实表,以及零到多个维度表,事实表与维度表通过主外键相关联,维度表之间没有关联,就像许多小星星围绕在一颗恒星周围,所以名为星形模型。
- 另一种常用的模型是雪花模型(SnowFlake Schema),就是将星形模型中的某些维表抽取成更细粒度的维表,然后让维表之间也进行关联,这种形状酷似雪花的的模型称为雪花模型。
- 还有一种更为复杂的模型,具有多个事实表,维表可以在不同事实表之间公用,这种模型被称为星座模型。
不过,Kylin目前只支持星形模型。