多维立方体分析介绍
**大数据OLAP的特点:**
1、大数据查询要的一般是统计结果,是多条记录经过聚合函数计算后的统计的。原始记录则不是必须的,或者被访问的频率和概率很低。
2、聚合是按维度进行的,而维度的聚合可能性是有限的,一般不随数据的膨胀而线性增长。
基于以上两点,我们得到一个新的思路——“预计算”。应尽量多的预计算聚合结果,在查询时刻也尽量使用预计算的结果得出查询结果,从而避免直接扫描可能无限增长的原始记录。
**MOLAP**
MOLAP(Multidimensional Online Analytical Processing)Cube,也就是多为立方体分析。Kylin是通过进行“大规模并行处理”和“列式存储”进行数据“预计算”及计算结果“存储”的。
# 工作原理
## 维度和度量简介
**维度**(dimension)就是**观察数据的角度**。例如淘宝的销售数据,可以从时间的纬度来观察,也可以进一步细化从时间和地区的纬度来观察。纬度一般是一组离散的值,比如时间维度上的每一个独立的日期,地区纬度上的每一个独立的地点等。因此,在进行数据统计时,可以把纬度值相同的记录聚合起来,使用聚合函数做累加、平均、去重复计数等聚合计算。
**度量**(measure)就是**被聚合的统计值**,一般是连续值,例如商品的销售额、零部件个数、填报的工时等等。通过比较和测算度量,分析师可以对数据进行评估,比如今年的销售额相比去年有多大增长、增长速度是否达标、不同商品类别的增长比例是否合理等。
## cube和cuboid
了解纬度和度量后,就可以对数据表或数据模型上的所有字段(列)进行分类了,要么是维度,要么是度量(可以被聚合)。因此就有了根据维度、度量做预计算的Cube。
给定一个数据模型,我们可以对其上所有维度进行组合。对于N个维度来说,所有组合的可能性就有2^N^种。在每一种维度的组合上,对度量做聚合运算,其运算的结果保存为一个物化视图,成为Cuboid。将所有维度组合的Cuboid作为一个整体,就是Cube。
下面举一个简单的例子说明,假设有一个电商的销售数据集,其中维度包括时间[time]、商品[item]、地区[location]和供应商[supplier],度量为销售额。那么所有维度的组合就有2^4 = 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。***
## 工作原理
Kylin的工作原理就是对数据模型做Cube预计算,并利用计算的结果加速查询:
1)指定数据模型,定义维度和度量;
2)预计算Cube,计算所有Cuboid并保存为物化视图(HBase中的一条条数据记录);
> - 预计算过程是Kylin从Hive中读取原始数据,按照我们选定的维度进行计算,并将结果集保存到Hbase中,默认的计算引擎为MapReduce,可以选择Spark作为计算引擎。
> - 一次build的结果,我们称为一个Segment(build后存储在HBase中的)。构建过程中会涉及多个Cuboid的创建,具体创建过程由kylin.cube.algorithm参数决定,参数值可选 auto,layer 和 inmem, 默认值为 auto,即 Kylin 会通过采集数据动态地选择一个算法 (layer or inmem),如果用户很了解 Kylin 和自身的数据、集群,可以直接设置喜欢的算法。
3)执行查询,读取Cuboid,运行,产生查询结果。
# 核心概念
## 数据仓库
数据仓库(Data Warehouse)是一种信息系统的资料存储理论,其强调的是利用某些特殊资料存储方式,让所包含的资料特别有利于分析处理,从而产生有价值的资讯并依次做决策。
利用数据仓库方式存放的资料,具有一旦存入,便不随时间变化而变动的特性,此外,存入的资料必定包含时间属性,通常,一个数据仓库会包含大量的历史性资料,并且它利用特定分析方式,从中发掘出特定的资讯。
## OLAP
OLAP(Online Analytical Process),即联机分析处理,以多维度的方式分析数据,并且能弹性的提供上卷(Roll-up)、下钻(Drill-down)和透视分析(Pivot)等操作,是呈现集成性决策信息的方法,其主要功能在于方便大规模数据分析处理及统计计算,多用于决策支持系统、商务智能或数据仓库。与之相区别的是联机交易处理(OLTP),联机交易处理侧重于基本的、日常的事务处理,包括数据增、删、改、查。
1. OLAP需要以大量历史数据为基础,配合时间点的差异并对多维度及汇整型的信息进行复杂的分析。
2. OLAP需要用户有主观的信息需求定义,因此系统效率较高。
## 维度建模
基本的维度模型由维度和度量两类对象组成。维度建模尝试以逻辑、可以理解的方式呈现数据,以使得数据的访问更加直观。维度设计的重点是简化数据和加快查询。
维度模型是数据仓库的核心。在数据仓库中,数据修改仅定期发生,并且是一次性开销,而读取是经常发生。
在数据挖掘中有几种常见的多维数据模型,如星形模型、雪花模型、事实星座模型等。
星形模型中有一个事实表,以及零个或多个维度表,事实表与维度表通过主键外键相关联,维度表之间没有关联,就像很多星星围绕在一个恒星周围。
如果将星行模型中的某些维度表再做规范,抽取成为更细的维度表,让维度表之间也进行关联,那么这种模型成为雪花模型。
事实星座模型是更为复杂的模型,其中包含多个事实表,而维度表是公用的,可以共享。
## 事实表和维度表
事实表(Fact Table)是指存储事实记录的表,如系统日志、销售记录等,并且是维度模型中的主表,代表键和度量的集合。事实表的记录会不断地动态增长,所以它的体积通常远大于其他表,通常事实表占据数据仓库中的90%或更多空间。
维度表(Dimension Table),也成维表或查找表(Loopup Table),是与事实表相对应的一种表。维度表的目的是将业务含义和上下文添加到数据仓库中的事实表和度量中。维度表是事实表的入口点,维度表实现了数据仓库的业务接口。它们基本上是事实表中的键引用的查找表。它保存了维度的属性值,可以与事实表做关联,相当于将事实表上经常出现的属性抽取、规范出来用一张表进行管理,常见的维度表有:日期表(存储日期对应的周、月、季度等属性)、地点表(国家、省、市等属性)。
### 维度的基数
维度的基数(Cardinality)指的是该维度在数据集中出现的不同值的个数。例如,“省”是一个维度,有34个,那么此维度的基数是34。通常,一个维度的基数为几十到几万,个别维度如“用户ID”的基数可能会超过百万甚至千万(淘宝),基数超过一百万的纬度通常被称为超高基数维度,需要引起设计者的注意。
Cube中的所有维度的基数可以体现Cube的复杂度。
## 多维数据模型
目前Kylin既支持星形数据模型,也支持雪花数据模型,这是基于以下考虑:
1. 星行模型与雪花模型是最为常见的数据模型
2. 由于只有一个大表,相比其他模型更适合大数据处理
3. 其他模型可以通过一定的转换,变为星行模型与雪花模型。
## 维度表的设计
Kylin对维度表有一定的要求:
1. 要具有数据一致性。主键值必须唯一,如果有两行数据的主键相同,则系统就会报错。
2. 维度表越小越好。过大的表不适合作为维度表,默认阈值是300Mb。
3. 改变频率低。
4. 维度表最好不要是Hive视图,虽然支持,但是每次都要将视图物化,导致额外的时间成本。
## 维度的基数
维度的基数是该维度在数据集中出现的不同值的个数。例如,“省”是一个维度,有34个不同的值,那么此维度的基数是200.通常,一个维度的基数为几十到几万,个别维度如“用户ID”的基数会超过百万甚至千万(淘宝),基数超过一百万的维度通常被成为超高基数维度,这个需要很注意。
Cube中所有维度的基数可以体现Cube的复杂度。
# 主页面
主页面构造参考如下页面:

多维分析平台主要由project(工程)、dataSource(数据源)、model(模型)、cube(多维立方体)、insight(数据洞察)这四个模块构成。整个数据分析的流程是先创建projet,然后在projet下的dataSource中连接数据源选择数据表,接着在project下构建数据纬度模型model,最后构建基于model的数据多维立方体cube,等到cube计算完成后,就可以进行数据洞察了,即通过SQL的select查询进行业务数据的统计查询,进而数据可视化。