一个关于kylin的疑惑

kylin 专栏收录该内容
1 篇文章 0 订阅

自从研究了kylin这个系统之后,就一直有一个疑惑,那就是kylin针对某一特定查询条件建立的cube,只能在这个条件下查询预计算的结果,如果条件一旦换了,cube就废了。带着这个疑问我在很多技术群里和别人讨论和争辩,都没有结果。看了很多网上分析的文章,都没有关于这个疑问的详细解答,于是今天自己试着写了一下cube,发现了一点点东西,总结一下,分享出来。

问题

Id Age Salary
1 28 300
1 28 300
2 30 320
1 29 310
2 30 320
3 33 350
3 32 340

假设有以上的表employee,有3个字段,分别为Id,Age,Salary,现在对这个表建立cube,其中度量为sum(salary),维度为Id,where条件为age>30,查询语句如下:

select sum(salary),id from employee where age >= 30 group by id

建立的cube只有一个,即:
id sum(salary)
2 640
3 690

那么此时,如果查询是:

select sum(salary), id from employee where age < 30 group by id

正确的查询结果是:
id sum(salary)
1 910

那么显然这样一个查询结果在上边的cube中指没有的,如果查询是:

select sum(salary), id from employee where age >32 group by id

正确的查询结果是:
id sum(salary)
3 350
那么显然,在上述的cube中也是查找不出来的。

究其原因,是因为在建立的cube中已经没有了age字段,已经无法通过age字段区做过滤。

处理方法

那么如果在维度字段中增加age,会是什么情况呢?
现在把建立cube的唯独字段增加一个age字段后,查询语句如下:

select sum(salary), id, age from employee where age > 29 group by id,age

构建出的cube有3个,分别是

cube1

id sum(salary)
1 310
2 640
3 690

cube2

age sum(salary)
30 640
32 340
33 350

cube3

id age sum(salary)
2 30 640
3 32 340
3 33 350

那么如果这时要以任意的age>29为条件进行查询,都是可以从cube3中查询的,例如age>30的查询,聚合cube3的最后两行即可。但是如果要查询的是age<29,那么显然,从上述3个cube中都查询不出来。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值