首页
学习
活动
专区
工具
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.3K30

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

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

75310
  • 如何使用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 树转换成

    1.7K21

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

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

    1.1K20

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

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

    1.4K10

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

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

    1.2K43

    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

    48620

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

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

    55420

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

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

    51920

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

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

    73610

    聊聊flink Table的groupBy操作

    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构造而来 RelBuilder的aggregate

    1.5K30

    聊聊flink Table的where及filter操作

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

    1.7K40

    聊聊flink Table的groupBy操作

    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构造而来 RelBuilder的aggregate

    1.2K20

    聊聊flink Table的where及filter操作

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

    53620

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

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

    46663

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

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

    84320

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

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

    51010

    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中选择最优代价的子节点,组合得到最优计划树。

    1K74
    领券