kylin 原理

Kylin是预计算引擎,如果有N个维度,则会计算出2^N个结果;

示例数据

源表: kylintest
2个维度(dimensions): year,city
1个指标(measure): price

yearcityprice
1993beijing10
1993beijing30
1994shanghai20
1994beijing40
预聚合表(构建Cube)

维度组合(year,city),预计算会计算2^N = 4个组合:(year,city),(year),(city),();

一个组合有一个Cuboid;

(year,city), 全维度组合的结果称为Base Cuboid;

yearcitysum(price)
1993beijing40
1994shanghai20
1994beijing40
1993*40
1994*60
*beijing80
*shanghai20
**100

相应的SQL:

//# (year,city),Base Cuboid
select year,city,sum(price) from kylintest group by year,city;

//# (year)
select year,sum(price) from kylintest group by year;

//#  (city)
select city,sum(price) from kylintest group by city;

//# ()
select sum(price) from kylintest;
维度编码:

依据各列的基数性

维度值编码
19930
19941
beijing0
shanghai1
生成cuboid

cuboid是8位,后几位是维度组合的相应bool值,表示是否有此维度;前几位填充0

维度组合为(yaer,city),两个维度都有,cuboid 为[000000(11)]
维度组合为(year),有一个维度,cuboid 为[000000(10)]

生成HBase Rowkey

Rowkey的格式: Shard ID(2字节) + Cuboid ID(8字节) + 维度编码;
这里为了简便,没有加入Shard ID;

维度RowkeyValue
(1993,beijing)000000 11 0040
(1994,shanghai)000000 11 1120
(1994,beijing)000000 11 1040
(1993,*)000000 10 040
(1994,*)000000 10 160
(*,beijing)000000 01 080
(*,shanghai)000000 01 120
(,)000000 00100
SQL查询转化Hbase的Scan操作

假设查询的SQL为

select year, sum(price) from table where city = "beijing" group by year

查询结果为

yearsum(price)
199340
199440

SQL查询维度year和city,对应的cuboid是00000011
city维度的值为"beijing", 对应的HBase rowkey就是:0000001100和0000001110

HBase时就会Scan Rowkey,取到对应指标sum(price)的值,返回给用户

参考:
https://blog.bcmeng.com/post/kylin-cube.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值