首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在使用RelBuilder构建RelNode时,有什么方法可以删除特定的规则吗?

在使用RelBuilder构建RelNode时,可以使用RelBuilder#removeRule方法来删除特定的规则。

RelBuilder#removeRule方法接受一个RelOptRule对象作为参数,用于指定要删除的规则。该方法会从RelBuilder的规则列表中移除指定的规则。

以下是一个示例代码:

代码语言:txt
复制
RelBuilder builder = ...; // 创建一个RelBuilder对象

// 添加规则到RelBuilder
builder.addRule(MyRule1.INSTANCE);
builder.addRule(MyRule2.INSTANCE);
builder.addRule(MyRule3.INSTANCE);

// 删除特定的规则
builder.removeRule(MyRule2.INSTANCE);

// 构建RelNode
RelNode relNode = builder.build();

在上述示例中,我们首先创建了一个RelBuilder对象,并使用addRule方法添加了三个规则。然后,我们使用removeRule方法删除了名为MyRule2的规则。最后,我们使用build方法构建了RelNode。

需要注意的是,RelBuilder#removeRule方法只能删除已经添加到RelBuilder的规则,无法删除系统默认的规则。如果需要删除系统默认的规则,可以考虑使用RelOptPlanner#clear()方法来清空所有规则,然后再重新添加需要的规则。

关于RelBuilder和RelNode的更多信息,可以参考腾讯云的文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Apache Calcite 文档翻译 - 关系代数

代数 关系代数是Calcite核心。每个查询都被表示为一棵关系运算符树。你可以将一条SQL语句翻译为关系代数,也可以直接建立树状结构。 规则规则使用保留语义数学特性来转换表达树。...代数构建 建立关系表达式最简单方法使用代数构建RelBuilder,下面是一个示例: 表扫描 final FrameworkConfig config; final RelBuilder builder...将中间结果存储left,right两个变量中,当创建最终Join使用push()方法将它们放回栈中: final RelNode left = builder .scan("CUSTOMERS...如果你一个特定RelNode实例,你可以相信字段名不会改变。事实上,整个关系表达式不可变。...这意味着 "两个输入中输入#0字段#5"。(为什么它需要知道两个输入?因为它们被存储堆栈中;输入 #1 堆栈顶部,而输入 #0 下面。

1.2K30

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

这里只是为了说明方便,使用了SQL进行讲述,其实优化器内部使用RelNode关系表达式构造操作符树组成来构建。但是常量上拉是基于操作符树父与子构建关系来确定上下关系。...matches方法返回此规则Rule是否可能与给定操作数operands匹配,但是此方法任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具OnMatch(ReloptRuleCall)而不生成任何后续任务...LIMIT 1000) PSP; 生成RelBuilder构建器来构建RelNode操作符树。...使用newChildExprs非等值常量谓词引用RexNode列表构建Project。...((HepRelVertex) child).getCurrentRel().equals(sort)) {//遍历父RelNodeRelNode,不等于都加入RelNode list,否则使用relBuilder.build

70510

如何使用calcite rule做SQL重写(上)

事实上目前各大数据库和大数据计算引擎都倾向于使用 CBO,但是对于流式计算引擎来说,使用 CBO 还是很大难度,因为并不能提前预知数据量等信息,这会极大地影响优化效果,CBO 主要还是应用在离线场景...优化规则 无论是 RBO,还是 CBO 都包含了一系列优化规则,这些优化规则可以对关系表达式进行等价转换,常见优化规则包含: 谓词下推 Predicate Pushdown 常量折叠 Constant...后面,性能上有提高; 对于Right outer Join,左侧表写在on后面、右侧表写在where后面,性能上有提高; 当条件分散两个表,谓词下推可按上述结论2和3自由组合; 所谓下推,即谓词过滤...案例 代码解析 首先,我们根据上一节内容,来构建一个带条件查询 RelNode opTree = relBuilder .scan("consumers")...r = hepPlanner.findBestExp(); 添加规则 初始化 HepProgram 对象; 初始化 HepPlanner 对象,并通过 setRoot() 方法RelNode 树转换成

88421

如何使用calcite rule做SQL重写(下)

上一篇文章我们介绍了如何使用默认规则做条件下推,今天我们来尝试自定义规则,来实现对SQL重写。...但是湖仓一体≠数据湖+数据仓库,湖仓一体不等同于数据湖和数据仓简单打通,湖仓一体构建需要解决以下三个关键问题: 湖和仓数据/元数据不需要用户人工干预情况下,可以无缝打通、自由顺畅地流动; 系统根据特定规则自动地将数据湖仓之间进行缓存和移动...,根据规则自动决定哪些数据放在数仓,哪些保留在数据湖,进而形成一体化; 湖和仓统一开发体验,存储不同系统数据,可以通过一个统一开发/管理平台操作。...笔者开源一个数据库,目前正在使用 bitcask 升级存储系统,欢迎兴趣小伙伴一起搞起来呀!...RelNode relNode = relBuilder.scan(targetName).build(); call.transformTo(relNode); } } 构建配置匹配规则

73743

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

匹配,但是此方法任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后OnMatch(ReloptRuleCall)而不生成任何后续任务。...判断由RelOptCall调用优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...同时此方法被调用,call.rels保存了与规则Rule操作数Operands匹配上关系表达式RelNode集合;call.rels[0]是根表达式。...如果联接左输入上有谓词,并且该谓词位于联接条件中使用列上,则可以联接右输入上推断谓词。(反之亦然。)...这也是删除GroupBy常量关键部分(哪些常量是可以删除,仔细看前面讲过,生成删除新newGroupSet。创建删除常量后新Aggregate对象。

1.4K10

如何使用calcite构建SQL并执行查询

大家好,这是 Calcite 第二篇文章了,我一直毫不掩饰对她喜爱,而且一直致力于为社区做一些贡献,如果你也喜欢这个项目的话,欢迎评论,转发,如果没看过第一篇的话,也欢迎移步去看看(手把手教你使用...关系代数 首先关系代数是 Calcite 核心。每个查询都可以表示为一个 关系运算符树。你可以将 SQL 转换为关系代数,也可以直接构建关系运算符树。...优化器规则使用保持 相同语义 数学恒等式 来变换表达式树。例如,如果过滤器没有引用其他输入中列,那么将过滤器推入到内部关联输入则是有效。...Calcite 通过反复地将优化器规则应用于关系表达式来优化查询。成本模型指导该过程,优化器引擎生成与原始语义相同,但成本较低替代表达式。 优化过程是可扩展。...你可以添加自己 关系运算符、优化器规则、成本模型 和 统计信息。 代数构建构建关系表达式最简单方法使用代数构建RelBuilder

67220

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

此优化规则中,Hive只实现了matches匹配方法判断逻辑部分,不支持RelNode关系表达式树中含有Window窗口函数或Hive各种分析函数Project投影操作,而相关逻辑判断和优化等价变换...优化器实现中,它可能会在调用OnMatch(ReloptRuleCall)之前将匹配ReloptRuleCall排队很长时间,matches方法提前判断这种方法好处,因为优化器可以处理早期...relBuilder = call.builder(); 虽然matches方法内优化规则Rule能否应用做了判断,但不会完全覆盖到,所以onMatch方法内也可做相应判断,如果不满足条件也不会做任何优化变换而结束...Rule(十)何为Mapping),取出Permutation对象字段和相应数据类型,再使用上面push底部Project操作子输入RelNode,然后构建器出新合并生成Project投影操作等价变换后...()); 最后,排除两者Project操作相同后,bottomProject.getInput()压入构建器内作为顶层Project操作RelNode使用relBuilder.project

44220

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

等值常量谓词上拉,这样可以把即出现在谓词中等于某个常量constant又出现在Project投影中变量或列引用,是此列引用不在参与中间结果一系列计算,直接在投影Project使用常量作为此列引用返回值...SQL进行讲述,其实优化器内部使用RelNode关系表达式构造操作符树组成来构建。...matches方法返回此规则Rule是否可能与给定操作数operands匹配,但是此方法任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具OnMatch(ReloptRuleCall)而不生成任何后续任务...构建器来构建RelNode操作符树。...使用newChildExprs非等值常量谓词引用RexNode列表构建Project。子RelNode创建新字段引用,此时已经去掉了已经被上拉常量字段。

51820

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

这是本篇文章重点。 为了说明方便,这里使用SQL进行讲述,其实优化器内部使用RelNode关系表达式构造操作符树组成来构建。...优化器匹配上规则Rule所有操作数Operands之后和调用OnMatch(ReloptRuleCall)之前调用此方法。...优化器实现中,它可能会在调用OnMatch(ReloptRuleCall)之前将匹配ReloptRuleCall排队很长时间,matches方法提前判断这种方法好处,因为优化器可以处理早期...判断由RelOptCall调用优化规则Rule是否与输入参数RelNode关系表达式匹配,即此优化规则Rule能否应用到一个RelNode关系表达式树上。...(call); } 但是此方法任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具有OnMatch(ReloptRuleCall)而不生成任何后续任务。

49820

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

此优化规则转换如下: 强调是,优化器规则所有的RelNode变换,必须是等价变换前提下。...优化规则HiveFilterSetOpTransposeRule 1)matches方法逻辑详解 matches方法返回此规则Rule是否可能与给定操作数operands匹配,但是此方法任何实现都可以给出误报...RelDataTypeField列表这里因为Union、Intersect 和Minus 等集合运算符号都要求分支投影字段相同字段和一致数据类型,所以这里可以从SetOp对象取List<RelDataTypeField...RexBuilder rexBuilder = filterRel.getCluster().getRexBuilder();//Filter过滤器行表达式构建器 final RelBuilder relBuilder...condition newSetOpInputs.add(relBuilder.push(input).filter(newCondition).build());//把判断条件放置分支RelNode

54520

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

但是此方法任何实现都可以给出误报,也就是说虽然规则与操作数匹配,但随后具OnMatch(ReloptRuleCall)而不生成任何后续任务。...同时此方法被调用,call.rels保存了与规则Rule操作数Operands匹配上关系表达式RelNode集合;call.rels[0]是根表达式。...复制AGG特征集合并使用已下推谓词子输入RelNode生成新RelNode对象,再补上剩余没有下推谓词条件,注册到RelSet等价关系表达式集合,以备优化器成本评估和选择,构建出最优执行计划。...还有如果使用GroupSet语句,并在谓词表达式中出现字段引用,都在grouping sets中出现,也是可以下推。...GroupSets //谓词表达式中出现字段引用,都在grouping sets中出现,也是可以下推

64210

聊聊flink TablegroupBy操作

Expression类型 select方法使用Project创建新Table,而Project则是通过Aggregate来创建 Aggregate flink-table_2.11-1.7.0-sources.jar...,传入RelBuilder.GroupKey参数是通过relBuilder.groupKey构建,而传入RelBuilder.AggCall参数则是通过aggregateExpressions.map...,最后调用Expression参数groupBy方法,该方法创建了GroupedTable GroupedTable两个属性,一个是原始Table,一个是Seq[Expression]类型groupKey...;它提供两个select方法,参数类型分别为String、Expression,String类型参数最后也是转为Expression类型;select方法使用Project创建新Table,而Project...参数是通过relBuilder.groupKey构建,而传入RelBuilder.AggCall参数则是通过aggregateExpressions.map构造而来 RelBuilderaggregate

1.5K30

聊聊flink Tablewhere及filter操作

及filter操作均有两中方法,一种是String参数,一种是Expression参数;而where方法内部是调用filter方法;filter方法使用Filter(predicate, logicalPlan...构造器里头创建了RelFactories.FilterFactory,它提供了两个filter方法,一个是RexNode变长数组参数,一个是RexNode类型Iterable参数;filter方法首先使用...接口 小结 Tablewhere及filter操作均有两中方法,一种是String参数,一种是Expression参数;而where方法内部是调用filter方法;filter方法使用Filter(predicate...等),然后再执行Apache CalciteRelBuilderfilter方法 RelBuilder构造器里头创建了RelFactories.FilterFactory,它提供了两个filter...方法,一个是RexNode变长数组参数,一个是RexNode类型Iterable参数;filter方法首先使用simplifier.simplifyFilterPredicates将RexNode类型

1.6K40

聊聊flink TablegroupBy操作

Expression类型 select方法使用Project创建新Table,而Project则是通过Aggregate来创建 Aggregate flink-table_2.11-1.7.0-sources.jar...,传入RelBuilder.GroupKey参数是通过relBuilder.groupKey构建,而传入RelBuilder.AggCall参数则是通过aggregateExpressions.map...,最后调用Expression参数groupBy方法,该方法创建了GroupedTable GroupedTable两个属性,一个是原始Table,一个是Seq[Expression]类型groupKey...;它提供两个select方法,参数类型分别为String、Expression,String类型参数最后也是转为Expression类型;select方法使用Project创建新Table,而Project...参数是通过relBuilder.groupKey构建,而传入RelBuilder.AggCall参数则是通过aggregateExpressions.map构造而来 RelBuilderaggregate

1.1K20

聊聊flink Tablewhere及filter操作

及filter操作均有两中方法,一种是String参数,一种是Expression参数;而where方法内部是调用filter方法;filter方法使用Filter(predicate, logicalPlan...构造器里头创建了RelFactories.FilterFactory,它提供了两个filter方法,一个是RexNode变长数组参数,一个是RexNode类型Iterable参数;filter方法首先使用...接口 小结 Tablewhere及filter操作均有两中方法,一种是String参数,一种是Expression参数;而where方法内部是调用filter方法;filter方法使用Filter(predicate...等),然后再执行Apache CalciteRelBuilderfilter方法 RelBuilder构造器里头创建了RelFactories.FilterFactory,它提供了两个filter...方法,一个是RexNode变长数组参数,一个是RexNode类型Iterable参数;filter方法首先使用simplifier.simplifyFilterPredicates将RexNode类型

50320

Calcite系列(五):执行流程-概览

通用流程 SQL执行流程一套通用步骤,尽管具体实现可能会因数据库系统不同而有所差异,但流程相对固定。...Schema信息校验SqlNode语法树合法性 计划树构建构建出基于关系代数表达逻辑计划树RelNode,方式一....基于RelBuilder API调用构建;方式二:基于SqlToRelConverter将SqlNode转换为 RelNode计划树 优化器优化:基于RelOptPlanner优化器进行计划树优化,包括逻辑优化与物理优化...执行过程中,Calcite对象变换过程所图所示,最终Planner优化器通过RelOptPlanner#findBestExp 调用方法搜索最佳计划树,目前Calcite内置优化器两种: HepPlanner...:基于RBO规则heuristic启发式优化器 VolcanoPlanner:基于CBO代价动态规划优化器 我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

23363

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

优化规则FilterReduceExpressionsRule 1)matches方法逻辑详解 matches方法返回此规则Rule是否可能与给定操作数operands匹配,但是此方法任何实现都可以给出误报...如果联接左输入上有谓词,并且该谓词位于联接条件中使用列上,则可以联接右输入上推断谓词。(反之亦然。)...在这些情况下,它们必须定义Values operator系统特定替代项,例如插入LIMIT 0来替代原始输入上Filter。...此方法实现是调用RelBuilderempty,是静态模式Schema可以被优化为一个空Values操作。...FilterReduceExpressionsRule主要是通过元数据信息或统计信息获知字段或表达式上Filter限制条件,已经是冗余或恒为True,恒为False,或未知等情况,构建执行计划

77920

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

但现在大部分成熟数据库优化器都是两种优化器结合起来使用,这样做为了优化器执行计划Plan构建速度和准确性之间找到一个好平衡点。...往期文章讲一个SQL解析过程,那么这里再简单讲述CBO优化器如何对一个SQL使用优化规则Rule,进行优化。...其是排序关系表达式RelNode不改变其内容情况下对输入采用特定顺序排序。...但是又不需要返回输出全部结果, 就可以SQL语句中使用SORT LIMIT从句。...如果匹配了才会执行OnMatch方法,把Rule生成等价RelNode注册到优化器RelSet关系表达式等价集合,供优化器使用动态规划算法构建成最优执行计划。

42910

Calcite系列(九):执行流程-优化器优化

目前,Calcite内置两类优化器: HepPlanner:RBO(Rule-based Optimizer)基于规则优化器,将计划树构建为DAG向无环图,按顺序依次遍历并执行优化规则 VolcanoPlanner...,通过Project算子移除未使用列,从而减少使用列和数据处理量 Calcite通过执行优化规则,实现RelNode等价转换,由三个步骤组成: 规则匹配模式:基于 RelOptRule#matches...,实现计划树等价转换 等价节点构建:转换后等价计划树维护RelOptRuleCall中,优化器可根据实现要求,构造出对应等价RelNode Calcite中,各类优化器都基于相同规则应用机制实现计划树等价转换...RBO优化器 下图展示RBO优化器HepPlanner执行流程,分为三个步骤: 初始化:将RelNode转换为DAG向无环图,其中各个顶点使用 HepRelVertex 表示并维护关联子节点 搜索最优计划树...因此,Memo搜索空间中,可以自顶向下从物理属性相同RelSubset中选择最优代价子节点,组合得到最优计划树。

36364
领券