ToB企服应用市场:ToB评测及商务社交产业平台

标题: 大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & [打印本页]

作者: 南七星之家    时间: 2024-10-20 13:49
标题: 大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 &
点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:


章节内容

上节我们完成了如下的内容:


定义Cube7

省略Model等操作。
构建前面Cube4类似的Cube7,仅在维度定义有区别。(我这里是Clone Cube4,然后修改的)
wzk_test_kylin_cube_7的字段中,都是Normal:

天生的如下图:

构建Cube7


大小对比

查看Size的对比:
由于之前数据太多跑的太慢,我的 cube-4 是125条数据占用22KB,我的cube-7是15条占用9KB。

大抵可以估计出来,cube-7的大小要比cube-4的大小大很多(假如同数据量的话)
精度对比

wzk_kylin_test_cube_4

  1. kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader wzk_kylin_test_cube_4
复制代码
对应的信息如下:

wzk_kylin_test_cube_7

  1. kylin.sh org.apache.kylin.engine.mr.common.CubeStatsReader wzk_kylin_test_cube_7
复制代码
对应的信息如下:

聚合组

随着维度数目标增长,Cuboid的数量会爆炸式的增长,为了缓解Cube的构建压力,Apache Kylin 引入了一系列高级的设置,资助用户筛选出真正需要的Cuboid(本质是要镌汰Cube构建过程中的预盘算),这些高级设置包罗:


默认Kylin会把全部维度放在同一个聚合组中
假如维度数较多(如维度数>15),发起用户根据查询的风俗和模式,将维度分布到多个聚合组中。通过使用多个聚合组,可以大大降低Cube中的Cuboid数量。
如一个Cube有(M+N)个维度:

在单个组合组中,可以对维度设置一些高级属性,包罗逼迫思维、层级维度、联合维度。一个维度只能出如今一个属性组中。
构建N个维度的Cube会天生的2^N个Cuboid,如下图所示,构建一个4个维度(A、B、C、D)的Cube,需要天生16个Cuboid。

根据用户关注的维度组合,可以维度分别差别的组合类,这些组合类在Kylin中被称为聚合组,如用户仅仅关注维度AB组合和维度CD组合,那么该Cube则可以被分化成两个聚合组,分别是聚合组AB和聚合组CD。天生的Cuboid数目从16个缩减为8个。

用户关心的聚合组之间可能包含相同的维度,如聚合组ABC和聚合组BCD都包含维度B和维度C,这些聚合组之间会衍生相同的Cuboid。聚合组ABC会产生Cuboid BC,聚合组BCD也会产生Cuboid BC。
这些Cuboid不会重复天生,一份Cuboid为这些聚合组所共有。

有了聚合组就可以粗粒度的对Cuboid进行筛选,获取本身想要的维度组合。Kylin的建模需要业务专家参数。
逼迫维度(Mandatory Dimension)

逼迫/须要 维度:指的是那些总会出如今Where条件或Group By语句中的维度。
通过指定某些维度为逼迫维度,Kylin不预盘算那些不包含此维度的Cuboid,从而镌汰盘算量。
维度A是逼迫维度,那么天生的Cube如下图所示,维度数从16变成9。

层级维度(Hierachy Dimension)

层级维度:是指一组有层级关系的维度
维度中常常会出现具有层级关系的维度,例如:国家、省份、城市这三个维度,从上而下来说:国家/省份/城市之间分别是一对多的关系。假设维度A代表国家,维度B代表省份,维度C代表城市,ABC三个维度可以被设置为层级维度,天生的Cube如下图所示:

Cuboid[A,C,D] = Cuboid[A,B,C,D], Cuboid[B,D] = Cuboid[A,B,D],因而Cuboid[A,C,D] 和 Cuboid[B,D] 就不必重复存储。
联合维度(Joint Dimension)

联合维度:是将多个维度视作一个维度,在进行组合盘算的时候,它们要么一起出现,要么均不出现。
通常实用于以下几种情形:

维度的基数:维度有多少个差别的值。
联合维度并不关心维度之间各种细节的组合方式,如用户查询语句中仅仅会出现GROUP BY A,B,C,而不会出现GROUP BY A、B大概GROUP BY C等等这细化的维度组合。这一类题目就是联合维度所办理的题目。
例如将A、B、C定义为联合维度,Apache Kylin就仅仅构建Cuboid ABC,而Cuboid AB、BC、A等等Cuboid都不会被天生,最终Cube结果如下图所示的,Cuboid数目从16镌汰到4:

总结内容


RowKeys

简朴的说Cuboid的维度会映射为HBase的Rowkey,Cuboid的指标会映射为HBase的Value。



编码

Kyelin以Key-Value的方式将Cube存储到HBase中,HBase的Key就是Rowkey,是由各维度的值拼接而成的,为了更高效的的存储这些值,Kylin会对它们进行编码和压缩,每个维度均可以选择合适的编码方式,为了更搞笑存储这些值,Kylin会对它们进行编码和压缩,每个维度均可以选择合适的编码方式,默认采用的是字典(Dictionary)编码技术。字段支持的基本编码范例如下:

序次

各维度在RowKeys中的序次,对于查询的性能会产生较显着的影响,在这里用户可以根据查询的模式和风俗,通过拖拽的方式调整各个维度在RowKeys上的序次,推荐的序次为:

分片

指定ShardBy的列,明细数据将按照该列的值分片,没有指定的ShardBy的列,则默认根据全部列中的数据进行分片,选择适当的ShardBy列,可以使明细数据较为匀称的分散在多个数据片上,进步并行性,进而获得更抱负的查询。
发起选择基数较大的列作为ShardBy列,以避免数据分散不匀称。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4