查看原文
其他

Hive优化器原理与源码解析系列--优化规则HiveFilterSortTransposeRule(二十一)

后羿BigDataplus BigDataplus 2021-10-15


目录


背景

优化规则HiveFilterSortTransposeRule

  • matches方法逻辑详解

  • onMatch方法逻辑详解

总结


背景

        这篇文章来讲优化规则HiveFilterSortTransposeRule,主要功能是Filter操作和SortLimit操作位置调换或Filter操作下推到HiveSortLimit操作之下,此规则也属于Filter过滤器下推的一种,只是下推到Sort排序操作之下,都是提前过滤掉不必要的数据,减少排序算力的浪费,以达优化目的。操作符树等价变换如下:

        其中,上述提到的HiveSortLimit排序类是对Calcite Sort关系表达式继承,在不改变其内容的情况下,对其输入强制执行特定的排序顺序(对排序完整描述)。

public Sort(RelOptCluster cluster, RelTraitSet traits, RelNode child, RelCollation collation, RexNode offset, RexNode fetch)

创建 Sort对象.

  • 参数

    cluster - 运行环境

    traits - 特征集合,是否排序,是否为分布式物理特征

    child -输入的关系表达式RelNode

    collation - 排序说明,排序字段、升序或降序等等

    offset - 在返回记录前抛弃的记录数

    fetch - 返回的记录数

强调说明的是,在Hive中,含有Order By和Sort By语句都是HiveSortLimit来实现的。


优化规则HiveFilterSortTransposeRule

 1)matches方法逻辑详解

        matches方法返回此规则Rule是否可能与给定的操作数operands匹配,但是此方法的任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具OnMatch(ReloptRuleCall)而不生成任何后续任务。

        判断由RelOptCall调用的优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。

        HiveSortLimit类,是对为Hive SQL语句中Sort和Order两种不同操作的实现类,此matches方法中,如果排序含有Limit语句,则退出优化。

public boolean matches(RelOptRuleCall call) { final HiveSortLimit sort = call.rel(1); // If sort contains a limit operation, we bail out if (HiveCalciteUtil.limitRelNode(sort)) {//如果排序含有Limit语句,则退出优化 return false; } return true;}


2)onMatch方法逻辑详解

        接收有关一条规则匹配的通知。同时此方法被调用,call.rels保存了与规则Rule的操作数Operands匹配上的关系表达式RelNode集合;call.rels[0]是根表达式。通常一条规则Rule会检查这些节点是否有效匹配,创建一个新表达式RelNode(等价的)然后调用RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>)注册表达式。而RelOptRuleCall用一系列RelNode关系表达式集合作为参数,对RelOptRule优化规则的调用。

        首先,call.rel(0)获取HiveFilter过滤器对象和call.rel(1)获取HiveSortLimit对象。

谓词下推主要分两个步骤:

  • 使用sort的输入sort.getInput()创建新Filter对象newFilter,意味着在Sort的子输入上创建过滤器,完成了Fitler下推到TableScan上。此时Filter从操作符树上看,在TableScan数据源之上。

  • 再使用新Filter对象newFilter,创建新SortLimit操作,即newFilter下推SortLimit操作之下。

以上完成了Filter操作下推到SortLimit操作之下。

public void onMatch(RelOptRuleCall call) { final HiveFilter filter = call.rel(0);//根 RelNode final HiveSortLimit sort = call.rel(1); final RelNode newFilter = filter.copy(sort.getInput().getTraitSet(),//保留了Sort输入的特征集合 ImmutableList.<RelNode>of(sort.getInput()));//使用Sort的输入创建Filter final HiveSortLimit newSort = sort.copy(sort.getTraitSet(), newFilter, sort.collation, sort.offset, sort.fetch);//创建SortLimit对象 call.transformTo(newSort);}


总结

        优化规则HiveFilterSortTransposeRule将Filter操作下推到SortLimit操作之下,此规则也属于Filter过滤器下推优化的一种。关于Sort操作Sort合并、Sort常量上拉、SortProject下推等前面几篇文章都有讲解到,不熟悉的读者可以向前翻阅(文末有链接)。

         由于笔者知识及水平有限,因此文中错漏之处在所难免,恳请各位老师、专家不吝赐教。



往期文章分享


优化规则系列

Hive优化器原理与源码解析系列--优化规则SortRemoveRule(一)

Hive优化器原理与源码解析系列--优化规则SortJoinReduceRule(二)

Hive优化器原理与源码解析系列--优化规则SortProjectTransposeRule(三)

Hive优化器原理与源码解析系列--优化规则SortUnionReduceRule(四)

Hive优化器原理与源码解析系列--优化规则SortMergeRule(五)

Hive优化器原理与源码解析系列--优化规则ProjectFilterPullUpConstantsRule(六)

Hive优化器原理与源码解析系列--优化规则SortLimitPullUpConstantsRule(七)

Hive优化器原理与源码解析系列--优化规则UnionPullUpConstantsRule(八)

Hive优化器原理与源码解析系列--优化规则ProjectOverIntersectRemoveRule(九)

Hive优化器原理与源码解析系列--优化规则ProjectSortTransposeRule(十)

Hive优化器原理与源码解析系列--优化规则HiveProjectMergeRule(十一)

Hive优化器原理与源码解析系列--优化规则HiveJoinAddNotNullRule(十二)

Hive优化器原理与源码解析系列--优化规则HiveJoinCommuteRule(十三)

Hive优化器原理与源码解析系列--优化规则PartitionPruneRule(十四)

Hive优化器原理与源码解析系列--优化规则HivePreFilteringRule(十五)

Hive优化器原理与源码解析系列--优化规则HiveAggregateProjectMergeRule(十六)

Hive优化器原理与源码解析系列--优化规则AggregateProjectPullUpConstantsRule(十七)

Hive优化器原理与源码解析系列--优化规则HiveFilterAggregateTransposeRule(十八)

Hive优化器原理与源码解析系列--优化规则HiveIntersectMergeRule(十九)

Hive优化器原理与源码解析系列--优化规则HiveFilterSetOpTransposeRule(二十)

成本模型系列

Hive优化器原理与源码解析系列—统计信息带谓词选择率Selectivity

Hive优化器原理与源码解析系列—统计信息之选择性

Hive优化器原理与源码解析系列—统计模块内存成本估算

Hive优化器原理与源码解析系列--统计信息中间结果大小计算

Hive优化器原理与源码解析系列—CBO成本模型CostModel(一)

Hive优化器原理与源码解析系列—CBO成本模型CostModel(二)

Hive优化器原理与源码解析系列—统计信息UniqueKeys列集合

Hive优化器原理与源码解析—统计信息Parallelism并行度计算

Hive优化器原理与源码解析—统计信息NDV唯一值数估算





: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存