Analyzing Joins with PlanViz

下面介绍一下几种join Engine

Join engine

执行两个Column table直接的join,还可以执行filter,简单的agregation/distinct,还有result set的sort和projetcion。

最主要的用途还是两个列表直接的关联。

OLAP engine

OLAP原先是设计给分析视图使用的,也能被SQL 语句和计算视图动态调用,最主要的目的是用来支持星型架构,agregation和join通常是同时执行,还支持Text join和temporal join。当分析视图中包含计算视图,计算视图会被包装成分析视图,激活的

Cloumn view会带上/olap后缀。OLAP engine也是第一个支持和利用 partitioned and distributed tables。

Calculation engine 

Calculation engine是设计给计算视图使用的,包含了计算结构中可重用和可堆栈元素。支持大量的POP,包括join,projection,调用分析视图,将查询传给R服务器等等。Calculation engine的高可用和可拓展使它成为所有场景的计算引擎,它还有自己的join实现方式。


我们可以看到不同的engine直接有功能重叠的部分。每个engine都可以执行filter,projection和join。一般都是根据具体情况来判断使用哪个engine。

在了解有哪些engine之后,后面就是要了解以下join的执行过程

Joins in PlanViz—Join Engine Join
select f.shop_id, a.family_name, sum (MARGIN) as "MARGIN"
from efashion.shop_facts f 
inner join efashion.article_lookup a
on f.article_id = a.article_id
group by f.shop_id, a.family_name

下面分3部分来看join的执行过程

Join Engine Join: Part 1 of 3

join过程的第一步一般都会考虑到性能优化。第一步不是简单的从表SHOP_FACT 读取所有的记录然后和表ARTICLE_LOOKUP

做join,HANA一般会对large table做preaggregate,如果我们用了过滤条件,会在Search on Table/Delta POPS中被用到。

JEEvalPrecond POP将在表中找到的row pointer放到一个internal intermediate data structure(内部中间数据结构)JEPlanData中,这个数据结构保存着非物化的数据。通过这种方式,大量的中间内存就被节省下来。

下一步JEDistinctAttribute给aggregation准备group,JECreateNTuple将需要aggregation的列值传输过去,不要被Sorted Merge Join弄糊涂了,这里的join指的是group和aggregated 列之间的join,不是两个表之间的jion。在aggregation之后数据还有4,220条,通过Result Assembly和Create Temp Index POP将数据存放在临时中间表中。



Join Engine Join: Part 2 of 3

以中间结果集为基础,两个表之间的join就可以开始了。Reduction Phase POP使用关联条件减少结果集的数据记录数。JEStep1 到JEStep4 POP为后续的处理过程准备数据结构。一个JEStep会有多个数据流到不同的后续步骤里面,哪个JEStep被使用取决于查询和可能的优化。正真的join是在JECreateNTuple POP中处理,现在只需要处理2,110 and 211条记录。



Join Engine Join: Part 3 of 3

join之后就是执行sql中的grouping和aggregation操作,这些在Grouping,Aggregation和Result Assembly POP中被处理



Joins in PlanViz—OLAP Engine Join

下面我们来对比Join Engine和OLAP Engine之间执行join的区别,一般情况我们需要创建一个计算视图来还原SQL中的逻辑,不过我们可以使用WITH HINT (OLAP_PARALLEL_AGGREGATION)语法,强制SQL语句使用OLAP Engine。我们将处理过程拆分成两个主要步骤

OLAP Engine Join: Part 1 of 2

基于将要被用来做group的字段SHOP_ID 和 ARTICLE_ID,BwPopJoin13(BwPopJoin1和BwPopJoin3的集合)创建了一个BwDimFn类型的中间数据结构。BwPopAggregateParallel 创建了一个ParallelHashMap数据结构。BwPopBuildResultParallel将从BwPopJoin13和BwPopAggregateParallel得到的信息创建一个中间结果集


OLAP Engine Join: Part 2 of 2

我们再看以下剩下的部分,BwPopJoin1Inwards和BwPopJoin3Inwards将中间结果集和ARTICLE_LOOKUP做Join,然后创建BWDimFn数据结构传到BwPopAggregateParllel和BwPopBuildResultParallel POP中,之后通过BWPopAggregateParallel将ParallelHashMap转换成中间临时结果表。

我们可以发现,为了并行执行聚集,column table中的数据需要转换成特殊的数据结构BWDimFn 和 ParallelHashMap,这种数据结构通常对大数据量有利,因此OLAP Engine不是所有join的最好选择











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值