Kylin
2020-08-19 20:22:44 22 举报
AI智能生成
Kylin
作者其他创作
大纲/内容
Kylin
核心概念
数据仓库,OLAP和OLTP,维度和度量,事实表和维度表,雪花模型,星性模型
数据仓库
什么是数据仓库?
数据类型不受限制存储,可对数据进行多维度分析为企业提供决策支持,报表生成等
数据仓库与数据库的区别
数据库面向事务,对业务进行增删改查,且对数据的实时性比较强,遵循三范式设计
数据仓库中都是历史数据,通过对历史数据进行多维度分析,数据冗余度高,查询速度快,利于决策者多维度查看数据
数据仓库分层
OLAP和OLTP
OLAP
联机分析处理,以历史数据为基础,配合时间点的差异,对数据进行多维度的分析,多用于数据仓库
OLTP
维度和度量
维度
对数据的观察角度不同,如通过省份,城市,县城,农村等角度分析,可在分层次,在sql中用group by 维度
度量
度量(`Measure`)就是基于数据所计算出来的考量值,通常就是一个数据比如总销售额,不同的用户数量。我们就是从不同的维度来审查度量值,以便我们分析找出其中的变化规律。sql中用sum()来获取度量值
Cube和cuboid
Cube
在确定维度和度量之后,就可以构建Cube,也就是预计算,对原始数据建立的多维度索引
cuboid
维度聚合运算,将运算后的结果保存为一个物化视图,称为Cuboid,所有维度组合的Cuboid作为一个整体,被称为Cube
Cube Segment
见名知意代表的是元数据中的某一个片段计算出的cube数据。通常数据仓库中的数据量会随着时间的增长而增长,而`Cube Segment`也是按照时间顺序来构建的。
事实表和维度表
事实表是指存储有事实记录的表,如日志,销售记录等,事实表中的数据是实时动态添加的,所有事实表中的数据远大于其他表
维度表与事实表相对应的一种表,它保存了维度的属性值,可以跟事实表做关联
多维度数据模型
星型模型
星型模型是一张事实表,以及零个或多维度表,事实表与维度表通过主键与之相关联,就像很多星星围着一颗恒星转
雪花模型
将星型模型中的维度抽取成更加细粒度的维度表,然后与各个维表之间相关联
区别
1.星型模型数据冗余,不需要做过多的外连接,直接可查询数据,其设计也简单于雪花模型,在数据仓库中一般使用星型模型
2.雪花模型外连接过多,其查询速度慢于星型模型,设计也更加复杂,但数据不冗余,在存储空间上也小于星型模型,雪花模型多用于数据库中表之间的设计
Kylin的工作原理
Cube预计算就是kylin工作的原理,典型的空间换取时间,利用cube可加快查询效率
执行流程
1.指定数据模型,定义维度和度量
2.预计算Cube,计算所有Cuboid并保存物化视图
3.执行查询时,读取Cuboid运算,产生查询结果
总结
`Kylin`的**核心思想是`Cube`预计算**,理论基础是空间换时间,把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询。
Kylin架构
增量Cube
全量和增量的区别
全量
一次性更新全部数据
不需要跟其他的Segment合并结果
适合小数据量和全表更新的Cube
后续不需要Segment合并
增量
Segment指定时间范围内的数据进行预处理
需要跟其他的Segment合并结果
累计到一定的Segment数量,会进行合并
适合大数据的Cube
1. 对于全量构建来说,它不会区分历史数据和新加入的数据,在操作时,会将数据一次性全部处理
2. 增量构建会根据Segment的指定时间范围内,对新加入的数据进行预处理
设计增量构建的前提
不是所有的Cube都适合增量构建,而且Cube必须要拥有时间维度,用来切割Segment,我将这维度称为分割时间列。
分割时间列可以是Hive的data类型,Timestamp类型或string类型,但无论哪种类型,kylin都要求指定分割时间列的数据格式,例如精确到年月日的`Date`类型(或者`String`类型)的数据格式可能是`yyyyMMdd`或`yyyy-MM-dd`,如果是精确到时分秒的`Timestamp`类型(或者`String`类型),那么数据格式可能是`YYYY-MM-DD HH:MM:SS`。
自动合并
每当有一个Segment的状态为READY,就会触发一次系统试图自动合并的尝试
保留Segment
kylin对于不经常使用且时间过久的数据会进行清除,超过一年份的数据不会对其进行保留,hive已经对这些进行备份了,Cube只会保留一年的数据量
数据持续更新
在实际场景下,我们常常会遇到ETL过程延迟,业务每天都需要刷新过去N天的Cube数据。
每一天对应创建一个Segment,七天对应七个Segment,能实时数据保存更新,但也会造成Segment堆积过多,需要手动去合并超过七天的Segment,非常麻烦
解决方案
不以日为单位创建新的Segment,以N天为单位创建新的Segment
0 条评论
下一页