zoukankan      html  css  js  c++  java
  • Kylin cube构建的优化

    衍生维度

    概念

      衍生维度用于在有效维度内将维度表上的非主键维度排除掉,并使用维度表的主键(其实是事实表上相应的外键)来替代它们。Kylin会在底层记录维度表主键与维度表其他维度之间的映射关系,以便在查询时能够动态地将维度表的主键“翻译”成这些非主键维度,并进行实时聚合。

    注意:

    虽然衍生维度具有非常大的吸引力,但这也并不是说所有维度表上的维度都得变成衍生维度,如果从维度表主键到某个维度表维度所需要的聚合工作量非常大,则不建议使用衍生维度。

    如图

    原本三个维度构建时,cuboid= 2^3 -1  = 7 个 

    维度表中 A是主键,不重复,那么E 就可以认为是A 的衍生维度,在构建时就可以用A 来代替E 这个维度,所以最后构建时,Cuboid = 2^2 -1 = 3 个

    这样构建cube时效率就会很高,而查询时如果设计到E这个维度,就会用E 来 替换 A ,从而得出结果。

    具体操作

    在选维度时,选定维度表中的衍生维度

     然后再聚合组中选定这俩个维度表的主键

     设定完成后,可以看到Cuboid = 3个

     聚合组中维度的设置

    强制维度

    如果一个维度被定义为强制维度,那么这个分组产生的所有Cuboid中每一个Cuboid都会包含该维度,不包含该维度的Cuboid则不会计算(一维维度不会计算在内)

    操作如下

     

    层级维度

    简单来说,B这个维度依赖于A这个维度,如果只有B没有A 则不会计算

    操作如下

     

     

     联合维度

    联合维度之间必须同时存在

     

     RowKey 的设计

    1)被用作where过滤的维度放在前边。

    2)基数大的维度放在基数小的维度前边。

    当cube  从 三维 往 二维 聚合运算时,会默认选择cuboid小的 三维 进行聚合, 从图中可以看出,C 的 基数 比 D 的基数大的多,所以右边的运算速度会更快一点

    操作

     并发粒度优化(了解)

        

    当Segment中某一个Cuboid的大小超出一定的阈值时,系统会将该Cuboid的数据分片到多个分区中,以实现Cuboid数据读取的并行化,
    从而优化Cube的查询速度。具体的实现方式如下:构建引擎根据Segment估计的大小,以及参数“kylin.hbase.region.cut”的设置决定Segment在存储引擎中总共需要几个分区来存储,
    如果存储引擎是HBase,那么分区的数量就对应于HBase中的Region数量。kylin.hbase.region.cut的默认值是5.0,单位是GB,也就是说对于一个大小估计是50GB的Segment,构建引擎会给它分配10个分区。
    用户还可以通过设置kylin.hbase.region.count.min(默认为1)和kylin.hbase.region.count.max(默认为500)两个配置来决定每个Segment最少或最多被划分成多少个分区。

    Cube 在 HBase中是以 Segment的形式存储的,这里其实就是在优化Hbase的分区策略,分区越多,并发度就会越好,一般保持默认就行

    设置方法

  • 相关阅读:
    Tensorflow Tutorial 2: image classifier using convolutional neural network Part-1(译)
    TensorFlow Tutorial: Practical TensorFlow lesson for quick learners
    TensorFlow Tutorial: Practical TensorFlow lesson for quick learners
    Builder Pattern(译)
    Mysql锁机制
    Monitorenter
    非静态内部类
    ConcurrentModificationException
    Http2.0协议
    Docker化 springboot项目
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12731028.html
Copyright © 2011-2022 走看看