数据立方体(Data Cube)是一种多维模型的表现。当然,这并不是指这个数据只有三维,数据立方体可以被看成是具有多维度的数据。
我们以一个例子来理解数据立方体 cube。
上图是数据立方体的一个示例。每个方块表示着对应维度的销售额数据。
数据立方体是一种多维数据模型,下面介绍一下多维模型的相关概念:
- 多维数据模型:为了满足用户从多角度多层次进行数据查询和分析的需要而建立起来的基于事实和维的数据库模型,其基本的应用是为了实现OLAP(Online Analytical Processing)
- 立方体:它是由维度构建出来的多维空间,包含了所要分析的基础数据,所有的聚合数据操作都在它上面进行
- 维度:观察数据的一种角度,比如在上图中季度、省份、产品类别都可以被看作一个维度,直观上来看维度是一个立方体的轴,比如三个维度可以构成一个立方体的空间
- 维度成员:构成维度的基本单位,比如对于省份维度,包含浙江上海江苏三个维度成员
- 层次:维度的层次结构,它存在两种:自然层次和用户自定义层次。比如对于时间维,可以分为年、月、日三个层次,也可以分为年、季度、月三个层次。一个维可以有多个层次,它是单位数据聚集的一种路径
- 级别:级别组成层次,比如年、月、日分别是时间维的三个级别
- 度量:一个数值函数,可以对数据立方体空间中的每个点求值;度量值自然就是度量的结果
- 事实表:存放度量值的表,同时存放了维表的外键,所有分析所用得数据最终都来自事实表
- 维表:对于维度的描述,每个维度对应一个或多个维表,一个维度对应一个表的是星型模式,对应多个表的是雪花模式
多维数据模型的模式
多维数据模型的模式主要有星形模式、雪花模式和事实星座模式。
星形模式
它是最常见的模式,它包括一个大的中心表(事实表),包含了大批数据但是不冗余;一组小的附属表(维表),每维一个。如下所示,从item、time、branch、location四个维度去观察数据,中心表是Sales Fact Table,包含了四个维表的标识符(由系统产生)和三个度量。
雪花模式
它是星模式的变种,将其中某些表规范化,把数据进一步的分解到附加的表中,形状类似雪花。如下所示,item这个维表被规范化,生成了新的item表和supplier表;同样location也被规范化为location和city两个新的表。
事实星座
允许多个事实表共享维表,可以看作是星形模式的汇集。如下所示,Sales和Shipping两个事实表共享了time、item、location三个维表。
总体来说,在数据仓库中多用事实星座模式,因为它能对多个相关的主题建模;而在数据集市流行用星形或雪花模式,因为它往往针对于某一个具体的主题。
cube核心操作
我们回到cube。
在Hive中,也同样有cube函数,可以做cube的多个核心操作,以实现任意维度的组合统计查询。
说得通俗一点,cube就是根据需求对各个维度做group by,得到不同维度的度量数据。当我们对三个维度a, b, c使用cube函数cube(a, b, c)时,会对(a, b, c), (a, b), (a, c), (a), (b,c),(b),( c), ()依次进行group by操作,()指的是对全表进行group by操作。可以看得出来,我们可以直接建立一个cube,再根据具体需求找到我们想要的维度,以得到特定维度的度量数据。
当然,对cube进行操作,当然有一些讲究的。以下就是实际使用时常用的cube核心操作。
切片(Slice)
将某一个(或多个)维度上的值锁定,只观察当这个维度取这个值时的情形,相当于将一个立方体做
了一个切片。如下图所示,我们在产品类别维度锁定了电子产品,得到该维度下的切片。
切块(Dice)
将某一个(或多个)维度上的值固定在一个区间内,观察这个取值区间内 cube 的情形,相当于将一
个立方体做了一个切块。如下图所示,我们在产品类别维度固定在一二季度之间,得到该维度下的切块。
上卷(Roll up)
沿着某一个(或多个)维度进行聚合,观察聚合后其他维度上的汇总数据,相当于将一个立方体沿着
某