KYLIN优化方式详解

一、概述

1.优化方式

    随着维度数目的增加,Cuboid 的数量会爆炸式地增长。为了缓解 Cube 的构建压力,Apache Kylin 引入了一系列的高级设置,帮助用户筛选出真正需要的 Cuboid。这些高级设置包括聚合组(Aggregation Group)、联合维度(Joint Dimension)、层级维度(Hierachy Dimension)和必要维度(Mandatory Dimension)等。

    众所周知,Apache Kylin 的主要工作就是为源数据构建 N 个维度的 Cube,实现聚合的预计算。理论上而言,构建 N 个维度的 Cube 会生成 2N 个 Cuboid, 如图 1 所示,构建一个 4 个维度(A,B,C, D)的 Cube,需要生成 16 个Cuboid。

2.分析手段

    使用Kylin命令获取Cube各项信息,可以帮助我们分析立方体整体情况,发现并优化短板。

./kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader feedback_cube

二、优化方式详解

1.减少维度

    随着维度数目的增加,Cuboid 的数量会爆炸式地增长。为了缓解 Cube 的构建压力,我们应该首先考虑是否需要现有的所有维度,尝试与业务人员和数据分析人员沟通,去除不必要的维度。

2.衍生维度(derived Dimension

    当一个或者多个维度(LookUp表上)可以由LookUp表主键推导得出的时候,可将其定义为衍生维度。由于衍生维度不参与维度聚合运算,可大大减少cubeID个数从而降低立方体空间占用。

使用范例:

Fact table(售后表A)

Lookup table(员工表B)

Join conditions

productlineid, orderFromid,srtypeid, srsubtypeid,srsubdetailid,hrid(FK)

hrid(PK), parentid, departmentid

A.hrid = B.hrid

由于员工表中的parentid, departmentid信息均可从hrid推倒而出,因此我们可将parentid、departmentid定义为衍生维度。由于衍生维度不参与维度聚合运算,因此CubeID个数从256降低至64,从而显著降低立方体空间占用。

3.聚合组(Aggregation Group)

    用户根据自己关注的维度组合,可以划分出自己关注的组合大类,这些大类在Kylin 里面被称为聚合组。例如图 1 中展示的 Cube,如果用户仅仅关注维度 AB 组合和维度 CD 组合,那么该 Cube 则可以被分化成两个聚合组,分别是聚合组 AB 和聚合组 CD。最终的 Cube 结果如图所示,生成的 Cuboid 数目从 16 个缩减成了 8 个。

4.必要维度 (Mandatory Dimension)

    用户有时会对某一个或几个维度特别感兴趣,所有的查询请求中都存在group by这个维度,那么这个维度就被称为必要维度,只有包含此维度的Cuboid会被生成。若将A设置为必要维度,最终的 Cube 结果如图所示,Cuboid 数目从 16 减少到 9

5.层级维度(Hierarchy Dimension)

    用户选择的维度中常常会出现具有层级关系的维度。例如对于国家、省份、城市这三个维度,从上而下来说国家、省份、城市之间分别是一对多的关系。也就是说,用户对于这三个维度的查询可以归类为以下三类:

  1. group by country
  2. group by country, province(等同于group by province)
  3. group by country, province, city(等同于 group by country, city 或者group by province, city 或者group by city)

假设ABC分别为国家省份城市,最终的 Cube 结果如图所示,Cuboid 数目从 16 减少到 8。

6.联合维度(Joint Dimension)

    用户有时并不关心维度之间各种细节的组合方式,例如用户的查询语句中仅仅会出现 group by A, B, C,而不会出现 group by A, B 或者 group by C 等等这些细化的维度组合。将维度 A、B 和 C 定义为联合维度,Apache Kylin 就仅仅会构建 Cuboid ABC,而 Cuboid AB、AC、BC、A、B、C 都不会被生成。最终的 Cube 结果如图所示,Cuboid 数目从 16 减少到 4。

三、实例详解

1.未优化CUBE-A

    立方体共六个维度,且均为一般性维度,立方体状态分析结果如下

./kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader feedback_db
============================================================================
Statistics of feedback_db[FULL_BUILD]

Cube statistics hll precision: 14
Total cuboids: 63
Total estimated rows: 147342
Total estimated size(MB): 7.894867897033691
Sampling percentage:  100
Mapper overlap ratio: 1.0
Mapper number: 1
Length of dimension TEST.FEEDBACK.PRODUCTLINEID is 1
Length of dimension TEST.FEEDBACK.ORDERFROMID is 1
Length of dimension TEST.FEEDBACK.SRTYPEID is 1
Length of dimension TEST.FEEDBACK.SRSUBTYPEID is 1
Length of dimension TEST.FEEDBACK.SRSUBDETAILID is 1
Length of dimension TEST.FEEDBACK.HRID is 2
|---- Cuboid 111111, est row: 6341, est MB: 0.34
    |---- Cuboid 011111, est row: 6367, est MB: 0.34, shrink: 100.41%
        |---- Cuboid 001111, est row: 5056, est MB: 0.27, shrink: 79.41%
            |---- Cuboid 000111, est row: 5090, est MB: 0.27, shrink: 100.67%
                |---- Cuboid 000011, est row: 2972, est MB: 0.16, shrink: 58.39%
                    |---- Cuboid 000001, est row: 348, est MB: 0.02, shrink: 11.71%
                    |---- Cuboid 000010, est row: 185, est MB: 0.01, shrink: 6.22%
                |---- Cuboid 000101, est row: 4618, est MB: 0.25, shrink: 90.73%
                    |---- Cuboid 000100, est row: 190, est MB: 0.01, shrink: 4.11%
                |---- Cuboid 000110, est row: 310, est MB: 0.02, shrink: 6.09%
            |---- Cuboid 001011, est row: 4492, est MB: 0.24, shrink: 88.84%
                |---- Cuboid 001001, est row: 2995, est MB: 0.16, shrink: 66.67%
                    |---- Cuboid 001000, est row: 79, est MB: 0, shrink: 2.64%
                |---- Cuboid 001010, est row: 254, est MB: 0.01, shrink: 5.65%
            |---- Cuboid 001101, est row: 4623, est MB: 0.25, shrink: 91.44%
                |---- Cuboid 001100, est row: 188, est MB: 0.01, shrink: 4.07%
            |---- Cuboid 001110, est row: 313, est MB: 0.02, shrink: 6.19%
        |---- Cuboid 010111, est row: 6379, est MB: 0.34, shrink: 100.19%
            |---- Cuboid 010011, est row: 4260, est MB: 0.23, shrink: 66.78%
                |---- Cuboid 010001, est row: 1109, est MB: 0.06, shrink: 26.03%
                    |---- Cuboid 010000, est row: 7, est MB: 0, shrink: 0.63%
                |---- Cuboid 010010, est row: 235, est MB: 0.01, shrink: 5.52%
            |---- Cuboid 010101, est row: 5908, est MB: 0.32, shrink: 92.62%
                |---- Cuboid 010100, est row: 230, est MB: 0.01, shrink: 3.89%
            |---- Cuboid 010110, est row: 372, est MB: 0.02, shrink: 5.83%
        |---- Cuboid 011011, est row: 5636, est MB: 0.3, shrink: 88.52%
            |---- Cuboid 011001, est row: 3977, est MB: 0.21, shrink: 70.56%
                |---- Cuboid 011000, est row: 97, est MB: 0.01, shrink: 2.44%
            |---- Cuboid 011010, est row: 310, est MB: 0.02, shrink: 5.5%
        |---- Cuboid 011101, est row: 5931, est MB: 0.32, shrink: 93.15%
            |---- Cuboid 011100, est row: 227, est MB: 0.01, shrink: 3.83%
        |---- Cuboid 011110, est row: 375, est MB: 0.02, shrink: 5.89%
    |---- Cuboid 101111, est row: 5103, est MB: 0.27, shrink: 80.48%
        |---- Cuboid 100111, est row: 5066, est MB: 0.27, shrink: 99.27%
            |---- Cuboid 100011, est row: 3285, est MB: 0.18, shrink: 64.84%
                |---- Cuboid 100001, est row: 860, est MB: 0.05, shrink: 26.18%
                    |---- Cuboid 100000, est row: 16, est MB: 0, shrink: 1.86%
                |---- Cuboid 100010, est row: 196, est MB: 0.01, shrink: 5.97%
            |---- Cuboid 100101, est row: 4594, est MB: 0.25, shrink: 90.68%
                |---- Cuboid 100100, est row: 190, est MB: 0.01, shrink: 4.14%
            |---- Cuboid 100110, est row: 308, est MB: 0.02, shrink: 6.08%
        |---- Cuboid 101011, est row: 4463, est MB: 0.24, shrink: 87.46%
            |---- Cuboid 101001, est row: 2986, est MB: 0.16, shrink: 66.91%
                |---- Cuboid 101000, est row: 79, est MB: 0, shrink: 2.65%
            |---- Cuboid 101010, est row: 253, est MB: 0.01, shrink: 5.67%
        |---- Cuboid 101101, est row: 4624, est MB: 0.25, shrink: 90.61%
            |---- Cuboid 101100, est row: 189, est MB: 0.01, shrink: 4.09%
        |---- Cuboid 101110, est row: 313, est MB: 0.02, shrink: 6.13%
    |---- Cuboid 110111, est row: 6384, est MB: 0.34, shrink: 100.68%
        |---- Cuboid 110011, est row: 4305, est MB: 0.23, shrink: 67.43%
            |---- Cuboid 110001, est row: 1240, est MB: 0.07, shrink: 28.8%
                |---- Cuboid 110000, est row: 20, est MB: 0, shrink: 1.61%
            |---- Cuboid 110010, est row: 247, est MB: 0.01, shrink: 5.74%
        |---- Cuboid 110101, est row: 5981, est MB: 0.32, shrink: 93.69%
            |---- Cuboid 110100, est row: 230, est MB: 0.01, shrink: 3.85%
        |---- Cuboid 110110, est row: 369, est MB: 0.02, shrink: 5.78%
    |---- Cuboid 111011, est row: 5662, est MB: 0.31, shrink: 89.29%
        |---- Cuboid 111001, est row: 3969, est MB: 0.21, shrink: 70.1%
            |---- Cuboid 111000, est row: 96, est MB: 0.01, shrink: 2.42%
        |---- Cuboid 111010, est row: 311, est MB: 0.02, shrink: 5.49%
    |---- Cuboid 111101, est row: 5927, est MB: 0.32, shrink: 93.47%
        |---- Cuboid 111100, est row: 229, est MB: 0.01, shrink: 3.86%
    |---- Cuboid 111110, est row: 373, est MB: 0.02, shrink: 5.88%
----------------------------------------------------------------------------

2.优化后CUBE-B

    立方体共六个维度,其中三个由于存在很强的关联性,于是将其定义为联合维度,其他维度为一般维度,立方体状态分析结果如下

    ./kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader feedback_cube

============================================================================
Statistics of feedback_cube[FULL_BUILD]

Cube statistics hll precision: 14
Total cuboids: 15
Total estimated rows: 27841
Total estimated size(MB): 5.575704431533813
Sampling percentage:  100
Mapper overlap ratio: 1.0
Mapper number: 1
Length of dimension TEST.FEEDBACK.PRODUCTLINEID is 1
Length of dimension TEST.FEEDBACK.ORDERFROMID is 1
Length of dimension TEST.FEEDBACK.SRTYPEID is 1
Length of dimension TEST.FEEDBACK.SRSUBTYPEID is 1
Length of dimension TEST.FEEDBACK.SRSUBDETAILID is 1
Length of dimension TEST.FEEDBACK.HRID is 2
|---- Cuboid 111111, est row: 6341, est MB: 1.27
    |---- Cuboid 011111, est row: 6367, est MB: 1.28, shrink: 100.41%
        |---- Cuboid 001111, est row: 5056, est MB: 1.01, shrink: 79.41%
            |---- Cuboid 001110, est row: 313, est MB: 0.06, shrink: 6.19%
        |---- Cuboid 011110, est row: 375, est MB: 0.07, shrink: 5.89%
    |---- Cuboid 101111, est row: 5103, est MB: 1.02, shrink: 80.48%
        |---- Cuboid 101110, est row: 313, est MB: 0.06, shrink: 6.13%
    |---- Cuboid 110001, est row: 1240, est MB: 0.25, shrink: 19.56%
        |---- Cuboid 010001, est row: 1109, est MB: 0.22, shrink: 89.44%
            |---- Cuboid 000001, est row: 348, est MB: 0.07, shrink: 31.38%
            |---- Cuboid 010000, est row: 7, est MB: 0, shrink: 0.63%
        |---- Cuboid 100001, est row: 860, est MB: 0.17, shrink: 69.35%
            |---- Cuboid 100000, est row: 16, est MB: 0, shrink: 1.86%
        |---- Cuboid 110000, est row: 20, est MB: 0, shrink: 1.61%
    |---- Cuboid 111110, est row: 373, est MB: 0.07, shrink: 5.88%
----------------------------------------------------------------------------

3.案例分析

    由于立方体CUBEID个数随着维度个数而呈现指数式增长,因此应尽量减少维度个数从而降低CUBEID个数。本范例中由于六个维度中有三个存在很强的关联性(SRTYPEID SRSUBTYPEID SRSUBDETAILID ),因此将其定义为联合维度。从而使得CUBEID个数显著下降,整体的行数和空间占用也有显著降低。

 维度数MandatoryHierarchyJointCubeID个数初始大小cube大小膨胀率
CUBE-A6000641.36MB6.25MB459.85%
CUBE-B6003161.36MB1.54MB113.62%

 

参考:http://lxw1234.com/archives/2017/04/849.htm

转载于:https://my.oschina.net/puwenchao/blog/1927219

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值