首页 > 其他 > 详细

Calcite分析 -- SortRemoveRule

时间:2021-09-02 21:05:27      阅读:22      评论:0      收藏:0      [点我收藏+]

Calcite Version:1.26.0

 

Rule执行之前的情况,

对#19,apply SortRemoveRule

技术分享图片

 

 

#19的input是rel#13:RelSubset#2.NONE.[]

这里就是将Sort中的,collation,放到RelSubset#2.NONE.[]的input上去,从而后续可以move掉这个sort

这里的逻辑看,只要是不带offset和fetch的sort,都会remove掉

完整的过程是,logicalSort with limit,通过EnumerableRule,生成一个新的sort算子和Limit算子;然后再用SortRemoveRule,将这个生成的sort remove掉。

技术分享图片

 

 

convet的结果,就生成一个带collation的subset,

技术分享图片

 

 

然后再用,rel#23:RelSubset#2.NONE.[0 DESC-nulls-last]调用transformTo

在ensureRegistered中,有RelSet的Merge

equivRel,是触发这个rule的算子,

这里触发merge的条件,是传入的rel和equiRel的subset都存在,并且他们的relset还不同

tranform这里的逻辑,一般两种,

convert,生成新的Relnode,transform,这种情况下传入的RelNode是还未注册的,不需要merge

convert,transform,这种情况下传入的就是Subset,但是一般Rule都是把当前Relset中的node做转换,所以也不需要merge

这里的情况,Convert的参数是sort.getInput,所以转换的别的RelSet中的Subset,这就需要merge

技术分享图片

 

 

Merge

技术分享图片

 

 

Merge With

先remove

技术分享图片

 

 

复制subset

其实就是在新的RelSet中,重新创建相应的traitSet的subset,这里需要区分required参数

技术分享图片

 

 

复制RelNode

技术分享图片

 

 reregister,主要是调用addReltoSet

技术分享图片

 

 结果,

技术分享图片

 

其他的处理,

对于parent,需要调用fixInput,然后重新算digest,

技术分享图片

 

最后对于,merge完的RelNode和Subset,做一下firerules,

技术分享图片

 

 

ruleDriver.onSetMerged(set)

 

Calcite分析 -- SortRemoveRule

原文:https://www.cnblogs.com/fxjwind/p/15220576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!