Apache Kylin权威指南(第2版)
上QQ阅读APP看书,第一时间看更新

2.5.1 全量构建和增量构建

1.全量构建

对数据模型中没有指定分割时间列信息的Cube,Apache Kylin会采用全量构建,即每次都从Hive中读取全部的数据来开始构建。通常它适用于以下两种情形:

●事实表的数据不是按时间增长的;

●事实表的数据比较小或更新频率很低,全量构建不会造成太大的存储空间浪费。

2.增量构建

进行增量构建的时候,Apache Kylin每次都会从Hive中读取一个时间范围内的数据,然后对其进行计算,并以一个Segment的形式保存。下次构建的时候,自动以上次结束的时间为起点时间,再选择新的终止时间进行构建。经过多次构建后,Cube中会有多个Segment依次按时间顺序进行排列,如Seg-1,Seg-2,…,Seg-N。进行查询的时候,Apache Kylin会查询一个或多个Segment然后再做聚合计算,以便返回正确的结果给请求者。

使用增量构建的优势是,每次只需要对新增数据进行计算,避免了对历史数据进行重复计算。对于数据量很大的Cube,使用增量构建是非常有必要的。

图2-27所示为构建一个Segment的Cube的输入框,需要用户选择时间范围。

图2-27 提交增量构建

在从Hive中读取源数据的时候,Apache Kylin会带上此时间条件,如图2-28所示。

图2-28 增量构建的SQL语句

注意 增量构建抽取数据的范围,采用前包后闭原则,也即包含开始时间,但不包含结束时间,从而保证上一个Segment的结束时间与下一个Segment的起始时间相同,但数据不会重复。

如果使用Apache Kylin的Web GUI触发,起始时间会被自动填写,用户只需选择结束时间。如果使用Rest API触发,用户则需确保时间范围不会与已有的Segment重合。