gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:58:17 25 4
gpt4 key购买 nike

我正在使用 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()
    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());
}

MyFilterableTable 中的扫描方法
public Enumerable<Object[]> scan(DataContext root, List<RexNode> filters)
获取合并的过滤器字符串 [AND(=($0, 'AM_TestItem_21Aug17_0614'), =($3, 'Item'))]

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

有什么办法吗?

最佳答案

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

此外,依赖过滤器不会合并的事实并不是一个好主意,因为将来很有可能会完成当前通过 FilterMergeRule 完成的合并当有两个相邻的过滤器运算符时,使用 RelBuilder。

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

关于java - 使用 RelBuilder 构建 RelNode 时,有什么方法可以删除特定规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59403758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com