Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用RelBuilder构建RelNode时,是否有任何方法可以删除特定规则?_Java_Apache Calcite - Fatal编程技术网

Java 在使用RelBuilder构建RelNode时,是否有任何方法可以删除特定规则?

Java 在使用RelBuilder构建RelNode时,是否有任何方法可以删除特定规则?,java,apache-calcite,Java,Apache Calcite,我正在使用RelBuilder构建一个RelNode FrameworkConfig frameworkConfig = config().build(); final RelBuilder builder = RelBuilder.create(frameworkConfig); RelNode root = builder.scan("ITEM", "TEST") .filter(

我正在使用RelBuilder构建一个RelNode

FrameworkConfig frameworkConfig = config().build();
 final RelBuilder builder = RelBuilder.create(frameworkConfig);
  RelNode root =
                 builder.scan("ITEM", "TEST")
                 .filter(
                         builder.equals(builder.field("ITEM_ID"), builder.literal("AM_TestItem_21Aug17_0614")))
                 .filter(
                        builder.equals(builder.field("OBJECT_TYPE"), builder.literal("Item")))
                 .build();

 PreparedStatement preparedStatement = RelRunners.run(root)
 preparedStatement.executeQuery()
MyFilterableTable中的扫描方法

公共可枚举扫描(DataContext根目录、列表筛选器)
将合并的筛选器字符串获取为[和(=($0,'AM_TestItem_21Aug17_0614'),=($3,'Item'))]

我想要这些过滤器的单独条目,而不是合并条目。 我希望计划者忽略FilterMerge规则


有什么方法可以做到这一点吗?

在使用
RelBuilder
API时,没有简单的方法可以有选择地启用/禁用规则,而且鉴于此API仅用于创建计划,这是正常的

此外,依赖过滤器不会被合并这一事实不是一个好主意,因为将来当存在两个相邻的过滤器操作符时,当前通过
FilterMergeRule
进行的合并很有可能通过RelBuilder完成


然而,在扫描操作中,您可以调用
RelOptUtil#conjunctions
方法,该方法将过滤器拆分为单独的连接,如果我很好地理解您的用例,这或多或少是您希望获得的

谢谢你的回复。RelOptUtil#连接给出了由和分解的单独条件。Used
root.getCluster().getPlanner().removule(FilterMergeRule.INSTANCE)
在优化中忽略
FilterMergeRule
规则。
    public static Frameworks.ConfigBuilder config() {
        CalciteSchema rootSchema1 = CalciteSchema.createRootSchema(true);
        rootSchema1 = rootSchema1.add("ITEM", new MySchema());
        // MySchema consists of Map of MyFilterableTable which extends AbstractTable and implements FilterableTable
        return Frameworks.newConfigBuilder().defaultSchema(rootSchema1.plus());
    }