增量构建
将Cube划分为多个Segment,每个Segment用起始时间和结束时间来标志。Segment代表了一段时间内源数据的预计算结果。
1.为什么要增量构建
对于大数据量的Cube,减少重复计算。
2.设计增量Cube
2.1设计增量Cube的前提
Cube的定义必须包含一个时间维度,用来分割不同的Segment,称这样的维度为分割时间列(Partition Date Column)。
在进行增量构建时,将增量部分的起始时间和结束时间作为增量构建请求的一部分提交给Kylin的任务引擎,任务引擎会根据起始时间和结束时间从Hive中抽取相应时间的数据,并对这部分数据做预计算处理,然后将预计算的结果封装成一个新的Segment,并将相应的信息保存到元数据和存储引擎中。一般来说,增量部分的起始时间等于Cube中最后一个Segment的结束时间。
2.2增量Cube的创建
1)Model层面的设置
每个Cube背后都关联着一个Model,Cube之于Model就好像Java中Object之于Class
2)Cube层面的设置
3.触发增量构建
3.1Web GUI触发
3.2构建相关的Rest API
4.管理Cube碎片
增量构建的Cube每天都可能有新的增量。
4.1合并Segment
4.2自动合并
4.3保留Segment
从碎片管理的角度看,自动合并是将多个Segment合并为一个Segment,以达到清理碎片的目的。保留Segment则是从另外一个角度帮助实现碎片管理,即及时清理不再使用的Segment。
4.4数据持续更新
一种比较简单的方法:每天在Cube中增量构建一个长度为一天的Segment。
目前,一种比较折中的方案是不以日为单位创建新的Segment,而是以N天为单位创建新的Segment。
参考资料:《Apache Kylin 权威指南》