Kylin工作原理
1.维度和度量
维度:观察数据的角度,一般是一组离散的值,通常是数据记录的一个属性。
度量:被聚合的统计值,也是聚合运算的结果,一般是连续的值;基于数据所计算出来的考量值,通常是一个数值。
在一个SQL查询中,Group By的属性通常就是维度,而所计算的值则是度量。
2.工作原理
对数据模型做Cube预计算,并利用计算的结果加速查询
a)指定数据模型,定义维度和度量
b)预计算Cube,计算所有Cuboid并保存为物化视图
c)执行查询时,读取Cuboid,运算,产生查询结果
由于Kylin的查询过程不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算,并利用预计算的结果来执行查询,因此相比非预计算的查询技术,其速度一般要快一到两个数量级。
3.事实表和维度表
事实表(Fact Table)是指存储有事实记录的表;记录在不断地动态增长,所以体积通常远大于其他表。
维度表(Dimension Table)/维表/查找表(LookUp Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联表;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。
4.Cube、Cuboid和Cube Segment
Cube(Data Cube),即数据立方体,可以对原始数据建立多维度索引。
Cuboid,在某一种维度组合下所计算的数据。
Cube Segment针对数据源中的某一个片段,计算出来的Cube数据。通常数据仓库中的数据数量会随着时间的增长而增长,而Cube Segment也是按时间顺序来构建的。
5.星形模型
星形模型,一张事实表,以及零个或多个维度表;事实表与维度表通过主键外键相关联,维度表之间没有关联;
雪花模型,星形模型中某些维度表再做规范,抽取成更细的维度表,然后让维度表之间也进行关联;
星座模型,包含了多个事实表,二维度表是公用的,可以共享。
Kylin只支持星形模型,其他模型可以通过一定的转换,变为星形模型。
6.维度表设计
a)具有数据的一致性,主键值必须是唯一的;Kylin会进行检查,如果有两行的主键值相同则会报错。
b)维度表越小越好,因为Kylin会将维度表加载到内存中供查询,默认的阈值300MB。
c)改变频率低,Kylin会在每次构建中视图重用维度表的快照。
d)维度表最好不要是HIve视图(View),每次都需要将视图进行物化,从而导致额外的时间开销。
7.Hive表分区
Kylin支持增量的Cube构建,通常是按时间属性来增量地从Hive表中抽取数据。如果Hive表正好是按此时间属性做分区的话,那么就可以利用到Hive分区的好处,每次在Hive构建的时候都可以直接跳过不相干日期的数据,节省Cube构建的时间。这样的列在Kylin里也称为分割时间列(Partition Time Column),通常它应该也是Hive表的分区列。
8.维度基数
维度的基数(Cardinality),该维度在数据集中出现的不同值的个数;基数超过一百万的维度通常被称为超高基数维度(Ultra High Cardinality,UHC)。
超高基数维度越多,Cube膨胀概率就越高。
计算技术方法:2.3.1
a)简单方法,Hive执行count distinct