Kylin实战,cube及查询优化,更小更快更好用!

 

1、聚合组(Aggregation Group)

针对不同的查询目的,结合查询语句中涉及到维度,将所有维度分为不同的组,这样可以减少 Cuboid的数量。

å¾2

图1

2、 必要维度(Mandatory Dimension)

用户有时会对某一个或几个维度特别感兴趣,所有的查询请求中都存在group by这个维度,那么这个维度就被称为必要维度,只有包含此维度的Cuboid会被生成(如图2)。这样Build出来的Cube变得很小(引用出处:https://kyligence.io/zh/blog/apache-kylin-advanced-setting-mandatory-dimension-principle/)。

图2

应用实例

假设一个交易数据的Cube,它具有很多普通的维度,像是交易时间order_dt,交易的地点location,交易的商品product和支付类型pay_type等。其中,交易时间就是一个被高频作为分组条件(group by)的维度。 如果将交易时间order_dt设置为必要维度,包含的维度和组合方式如图3:

 

图3

3、对于Hierachy Dimension, 将具有层次关系的维度分为一组, 比如年、月、日。(虽热是过滤条件,但不必放入必要维度)

示例:

4、Cuboid大小只和维度列的基数有关,和源数据行数无关。降低维度的基数也很关键,例如:将时间戳字段转换成日期。

6、Cube中RowKey顺序:必要维度/group by的维度,Where过滤条件频繁涉及的维度,高基数维度,低基数维度。

      例如:将低基数维度time的rowkey顺序设为1,可以减少hbase中的扫描范围,查询的性能也就更好。

è¿éåå¾çæè¿°

7、查询优化:时间维度筛选一段时期,可以用between and;可以传参的维度,尽量不要group by分组;可以在sql语句中进行的计算,不要从kylin中获取,例如:比率;where 条件中,能缩小查询范围的维度,顺序要靠前。

8、从Hbase中进行优化(待续)。