Apache Kylin权威指南(第2版)
上QQ阅读APP看书,第一时间看更新

1.3.2 Cube和Cuboid

了解了维度和度量,就可以对数据表或者数据模型上的所有字段进行分类了,它们要么是维度,要么是度量(可以被聚合)。于是就有了根据维度、度量做预计算的Cube理论。

给定一个数据模型,我们可以对其上所有维度进行组合。对于N个维度来说,所有组合的可能性有2N种。对每一种维度的组合,将度量做聚合运算,运算的结果保存为一个物化视图,称为Cuboid。将所有维度组合的Cuboid作为一个整体,被称为Cube。所以简单来说,一个Cube就是许多按维度聚合的物化视图的集合。

举一个具体的例子。假定有一个电商的销售数据集,其中维度有时间(Time)、商品(Item)、地点(Location)和供应商(Supplier),度量有销售额(GMV)。那么,所有维度的组合就有24=16种(如图1-3所示),比如一维度(1D)的组合有[Time][Item][Location][Supplier]四种;二维度(2D)的组合有[Time,Item][Time,Location][Time、Supplier][Item,Location][Item,Supplier][Location,Supplier]六种;三维度(3D)的组合也有四种;最后,零维度(0D)和四维度(4D)的组合各有一种,共计16种组合。

图1-3 四维Cube

计算Cuboid,就是按维度来聚合销售额(GMV)。如果用SQL来表达计算Cuboid[Time,Location],那就是:

select Time, Location, Sum(GMV) as GMV from Sales group by Time, Location

将计算的结果保存为物化视图,所有Cuboid物化视图的总称就是Cube了。