Kylin设计详解 二

目录

4 Cube构建及优化

4.1 Cube构建及优化总览

4.2 Cube构建分步骤说明


4 Cube构建及优化

4.1 Cube构建及优化总览

构建Cube的过程设计可以说是 kylin 系统设计的精华,这7个步骤封装了 kylin 绝大多数的实现细节,呈现出来的是简洁精炼的构建步骤。

上图中,有7个步骤,可以分为三个阶段:前四步为构建阶段,5、6步为优化阶段,最后一步为总览。下面我们一个一个详细说一下

4.2 Cube构建分步骤说明

 

在这一步中,我们需要设置的是 Cube 的基本信息,其中包括:

Model Name:model 名。

Cube Name: Cube 名,全局唯一,否则会创建失败。

Notification Email List:发生了 Notification Events 时要通知的邮件列表,逗号分隔。

Notification Events:发生什么事件时要邮件通知列表中的用户,分为 Success(构建成功)、Error(构建失败)、Discard(构建中止)。

Description:描述。

 设置 Cube 所需的维度,查找表中的维度可以设置为 normal 或 derived,设置为 derived 的维度不会在 rowkey 中出现,而是用其他 normal 维度通过一层映射得到。

这一步骤主要选择 Cube 中要构建的指标。
所有 Cube 都会计算一个默认的指标 COUNT,即数行数,除此之外,我们还可以定义其他指标:

SUM:求和。

MIN:最小值。

MAX:最大值。

COUNT:计数。

COUNT_DISTINCT:去重计数,有精确计算和模糊计算两种。一般来说,计算越精确,构建时资源消耗越多,查询时响应速度越慢;计算越模糊,构建时资源消耗越少,查询时响应速度越快。精确计算的 COUNT_DISTINCT 会存储为 bitmap,模糊计算的 COUNT_DISTINCT 会存储为其他的数据结构(如HyperLogLog),无论是哪种数据结构,都会占用一定的存储空间,若数据量大,占用的空间可能会在M级别,所以,若有多个去重指标,最好把它们存储在不同的列簇中,防止 Hbase 检索速度过慢。

TOP_N:前 N 位。适用于以下场景:

select dimA, measure from table_name where dimB = 'b' and dimC = 'c'order by measure limit N;

在不用 TOP_N 的情况下,查询引擎会从 Hbase 中查出所有符合条件的行,并依据其中的某个指标对所有列做排序。例如下面的场景,经过 TOP_N 优化后,Hbase 中数据存储的形式会从这样 

Base Cuboid 的 RowKey

SUM(PRICE)

20120218_00_seller0000001

291.58

20120218_00_seller0000002

365.18

20120218_00_seller0000003

135.29

20120218_00_seller1000000

272.31

20120218_01_seller0000001

172.52

变成这样:

base cuboid 的 RowKey

Top_N Measure

20120218_00

sellerOO 10091:1092.21, seller0005002:1090.35,…sellerOOO 1789:891.37

20120218_01

seller0003012:xx.xx

20120218 02

seller0004001:xx.xx

20120218 50

seIler000699: xx.xx

经 TOP_N 优化后存储结构节省了检索的计算成本,免去了排序的计算成本,可提高查询性能,但带来的问题是列簇的空间占用增加,Cube 的体积会变大。且子 Cuboid 的 TOP_N 指标是从父 TOP_N 的指标聚合出来的,会有一定程度的误差。
7) EXTENDED_COLUMN:引申列。适用于筛选时指定某些 id,但显示时却要显示成 name 时的场景,即把一个维度作为另一个维度的引申列。(后续补充引申列的查询方法和存储结构)
8) PERCENTILE:分位数。查询时该函数的语法与 hive 类似,例如 percentile(measure_a, 0.5),即计算 measure_a 的二分位数,即中位数。

这一步骤主要是表的刷新机制和生命周期设置,分为以下几项:

Auto Merge Thresholds:自动合并 Segments,可以设多级。若不合并,查询引擎需要在对各 Segments 查询后,对结果做一个合并。所以合并 Segment 在一定程度上可以提高查询效率。但是 Segment 是 Cube 构建和刷新的最小单位,合并后就无法对原有的某一个 Segment 单独做刷新操作。

Volatile Range:最近 N 天的 Segments 不作合并,适用于因数据延迟导致最近 N 天数据会有波动,需要刷新 Segments 的情况。

Retention Threshold:生命周期,自动删除 N 天以前的 Segment。

Partition Start Date:起始日期,默认 1970-01-01。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值