Kylin
2020-08-19 20:22:44   22  举报             
     
         
 AI智能生成
  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    
     一个Cube有多个Segment,每个Segment有起始时间和结束时间标志,Segment是这段时间的源数据预计算结果,上一个结束的Segment的时间正是下一个Segment的起始时间  
     全量和增量的区别    
     全量    
     一次性更新全部数据
  
     不需要跟其他的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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 