牛骨文教育服务平台(让学习变的简单)
博文笔记

Kylin工作原理

创建时间:2017-09-22 投稿人: 浏览次数:495

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




声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。