Kylin系列(二)—— Cube 构造算法

总目录

Kylin系列(一)—— 入门
Kylin系列(二)—— Cube 构造算法


Kylin cube 构造算法

逐层算法(layer Cubing)

我们知道,一个N维的Cube,是有1个N维子立方体、N个(N-1)维子立方体、N*(N-1)/2个(N-2)维子立方体、……、N个1维子立方体和1个0维子立方体构成,总共有2^N个子立方体。在逐层算法中,按照维度数逐层减少来计算,每个层级的计算(除了第一层,他是从原始数据聚合而来),是基于他上一层级的计算结果来计算的。

比如group by [A,B]的结果,可以基于group by [A,B,C]的结果,通过去掉C后聚合得来的,这样可以减少重复计算;当0维Cuboid计算出来的时候,整个Cube的计算也就完成了。

此处输入图片的描述

如上图所示,展示了一个4维的Cube构建过程。

此算法的Mapper和Reducer都比较简单。Mapper以上一层Cuboid的结果(key-value对)作为输入。由于Key是由各维度值拼接在一起,从其中找出要聚合的维度,去掉它的值成新的key,并对value进行操作,然后把新的key和value输出,进而Hadoop MapReduce对所有新的key进行排序、洗牌(shuffle)、再送到Reducer处;Reducer的输入会是一组具有相同key的value集合,对这些value做聚合运算,再结合key输出就完成了一轮计算。

举个例子:
假设一共四个维度A/B/C/D,他们的成员分别是(A1、A2、A3),(B1、B2)、(C1)、(D1),有一个measure(对于这列V,计算sum(V)),这里忽略dictionary编码。原始表如下:
此处输入图片的描述

那么base cuboid最终的输出如下
(A1、B1、C1、D1、2)
(A1、B2、C1、D1, 3)
(A2、B1、C1、D1, 5)
(A3、B1、C1、D1, 6)
(A3、B2、C1、D1, 8)
那么它作为下面一个cuboid的输入,对于第一行输入
(A1、B1、C1、D1,2),mapper执行完成之后会输出
(A1、B1、C1, 2)、
(A1、B1、D1, 2)、
(A1、C1、D1, 2)、
(B1、C1、D1,2)这四项,同样对于其他的内一行也会输出四行,最终他们经过reducer的聚合运算,得到如下的结果:
(A1、B1、C1, 2)
(A1、B1、D1, 2)
(A1、C1、D1, 2 + 3)
(B1、C1、D1,2 + 5 +6)

这个例子其实在cube的构建过程中可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值