优化cube设计

分层结构(Hierarchies)

理论上,N个维度将得到2^N 个维度组合;
但是对一组维度,没必要创建这么多维度组合;
例如,如果有3个维度: continent, country, city (从层级来说,更大的维度在更前面),

当下钻分析时只需要支持3个group by的组合:

  • group by continent
  • group by continent,country
  • group by continent,country,city

这个例子中,维度组合从2^3 = 8个下降到 3个;
8个维度组合为:
(continent,country,city),
(continent,country),(continent,city),(country,city),
(continent),(country),(city),
()

这是非常大的性能优化;这也似用于YEAR,QUATER,MONTH,DATE的例子;

将层级维度记为H1,H2,H3,典型的场景为:

A. lookup表的层级

Fact表(joins)Lookup表
column1,column2, FKPK,H1,H2,H3,

B. fact表的层级

Fact表
column1,column2,H1,H2,H3,

场景A是特殊的例子,lookup表的PK(外键)刚好是层级的一部分;
例如,有一个日历lookup表, cal_dt是主键:

A* lookup表的主键是层级的一部分

lookup表(Calendar)
cal_dt(PK), week_beg_dt, month_beg_dt, quarter_beg_dt,

场景A* 需要另一种优化,称为"Derived Columns"

衍生字段(Derived Columns)

衍生字段: 一个或多个维度可以从别的维度推断出来;
主维度: 一般为FK;
衍生维度: lookup表的维度;

例如,在Kylin里有lookup表join 事实表: where DimA = DimX, 当选择维度FK时,相应的PK会自动可查询;
这是因为,当FK和PK确定时, kylin会先在FK应用filter/groupby,然后替换成PK;

如果想要让DimA(FK), DimX(PK), DimB, DimC都可使用cube,可以安全地选择DimA,DimB,DimC维度

Fact表(joins)Lookup表
column1,column2, DimA(FK)DimX(PK),DimB, DimC

我们称 DimA(为FK/PK的维度)特殊的映射到DimB:

dimAdimBdimC
1a?
2b?
3c?
4a?

这个例子中,给定DimA的值,就能确定DimB的值,我们称dimB可以由DimA推断出;
当构建的cube包含DimA和DimB,只会包含DimA,将DimB标记为衍生(derived);
衍生字段(DimB)不会参于cuboid的生成;

原始的组合: ABC,AB,AC,BC,A,B,C
当B可由A衍生时的组合: AC,A,C

当查询"select count(*) from fact_table inner join looup1 group by looup1 ,dimB"时,预期会有包含DimB的cuboid来应答; 但是因为衍生优化, DimB的cuboid显示为NONE;在这个案例中,会修改执行计划先group by DimA,会得到中间应答:

dimAcount(*)
11
21
31
41

然后,kylin会用DimB的值替换DimA的值(当DimA和DimB的值都在lookup表时,kylin会加载表到内存,并构建映射),中间结果变为:

dimBcount(*)
a1
b1
c1
a1

之后, SQL引擎(calcite)进一步聚合中间结果为:

dimBcount(*)
a2
b1
c1

这一步发生在查询运行阶段,这也是"额外运行时聚合的成本"的意思

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值