在优化过程中,我们应该在两个方面去考虑,cube构建+查询速率,接下来我也是通过两方面去概述。
1.使用衍生维度(derived dimension):
衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们。Kylin会在底层记录维度表主键与维度表其他维度之间的映射关系,以便在查询时能够动态地将维度表的主键“翻译”成这些非主键维度,并进行实时聚合。
将维度表上的非主键排除,在使用时用维度表主键来代替(其实是事实表上相应外键),不过kylin会在底层记录维度表逐渐与外键之间的关系。而在查询时,动态的将维度表主键翻译成非主键维度,并进行聚合。
2 使用聚合组(Aggregation group):
1)强制维度(Mandatory)
2)层级维度(Hierarchy):例如年月日、省市区。
只要有B前面一定有A
3)联合维度(Joint):两个必须同时出现才有意义
设置界面:
3、 Row Key优化
Row key的设计原则如下:
结论:基数大的放前面(构建),被用作过滤条件的放前面(查询)
1)被用作过滤的维度放在前边。(优化查询)
2)基数大的维度放在基数小的维度前边。(优化构建)
基数:就是count(distinct)或group by之后count的大小,比如月和日,月的基数是12,日的基数是30
在维度聚合的时候,kylin默认会选择cuboid小的(1101小于1110)进行聚合,所以我们要把基数大的维度向前调。主要是基数越小,聚合程度越高
4 并发粒度优化:
一个cube每日都要构建一次,形成一张表放入hbase中,然后7天一小合并,28天一大合并。
参数设置:
两种方式,一种到达5G分裂成两部分,一种直接分配固定大小的region,通过max和min设置,这样可以提高查询效率。
由于每个Cube的并发粒度控制不尽相同,因此建议在Cube Designer 的Configuration Overwrites(上图所示)中为每个Cube量身定制控制并发粒度的参数。假设将把当前Cube的kylin.hbase.region.count.min设置为2,kylin.hbase.region.count.max设置为100。这样无论Segment的大小如何变化,它的分区数量最小都不会低于2,最大都不会超过100。相应地,这个Segment背后的存储引擎(HBase)为了存储这个Segment,也不会使用小于两个或超过100个的分区。我们还调整了默认的kylin.hbase.region.cut,这样50GB的Segment基本上会被分配到50个分区,相比默认设置,我们的Cuboid可能最多会获得5倍的并发量。