From ed111d19a7d7423ae79698a669833a79f9255893 Mon Sep 17 00:00:00 2001 From: xuzifu666 <1206332514@qq.com> Date: Sat, 9 Nov 2024 16:38:18 +0800 Subject: [PATCH 1/7] [core] Introduce InPredicateVisitor to refactor Predicate handle --- .../paimon/predicate/InPredicateVisitor.java | 53 +++++++++++++++++++ .../paimon/table/system/SchemasTable.java | 28 +++------- .../paimon/table/system/SnapshotsTable.java | 29 +++------- .../apache/paimon/table/system/TagsTable.java | 38 +++++-------- 4 files changed, 78 insertions(+), 70 deletions(-) create mode 100644 paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java new file mode 100644 index 000000000000..518cb1eeb5fe --- /dev/null +++ b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.paimon.predicate; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** A utils to handle {@link Predicate}. */ +public class InPredicateVisitor { + + /** + * Method for handling with CompoundPredicate. + * + * @param predicate CompoundPredicate to traverse handle + * @param leafName LeafPredicate name + */ + public static Optional> extractInElements(Predicate predicate, String leafName) { + if (!(predicate instanceof CompoundPredicate)) { + return Optional.empty(); + } + + CompoundPredicate compoundPredicate = (CompoundPredicate) predicate; + List leafValues = new ArrayList<>(); + List children = compoundPredicate.children(); + for (Predicate leaf : children) { + if (leaf instanceof LeafPredicate + && (((LeafPredicate) leaf).function() instanceof Equal) + && leaf.visit(LeafPredicateExtractor.INSTANCE).get(leafName) != null) { + leafValues.add(((LeafPredicate) leaf).literals().get(0)); + } else { + return Optional.empty(); + } + } + return Optional.of(leafValues); + } +} diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java index b6150ef7524c..f7bb46236393 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java @@ -26,17 +26,7 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.And; -import org.apache.paimon.predicate.CompoundPredicate; -import org.apache.paimon.predicate.Equal; -import org.apache.paimon.predicate.GreaterOrEqual; -import org.apache.paimon.predicate.GreaterThan; -import org.apache.paimon.predicate.LeafPredicate; -import org.apache.paimon.predicate.LeafPredicateExtractor; -import org.apache.paimon.predicate.LessOrEqual; -import org.apache.paimon.predicate.LessThan; -import org.apache.paimon.predicate.Or; -import org.apache.paimon.predicate.Predicate; +import org.apache.paimon.predicate.*; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.schema.SchemaManager; import org.apache.paimon.schema.TableSchema; @@ -229,17 +219,11 @@ public InnerTableRead withFilter(Predicate predicate) { // optimize for IN filter if ((compoundPredicate.function()) instanceof Or) { - List children = compoundPredicate.children(); - for (Predicate leaf : children) { - if (leaf instanceof LeafPredicate - && (((LeafPredicate) leaf).function() instanceof Equal) - && leaf.visit(LeafPredicateExtractor.INSTANCE).get(leafName) - != null) { - schemaIds.add((Long) ((LeafPredicate) leaf).literals().get(0)); - } else { - schemaIds.clear(); - break; - } + Optional> leafs = + InPredicateVisitor.extractInElements(predicate, leafName); + if (leafs.isPresent()) { + leafs.get().stream() + .forEach(leaf -> schemaIds.add(Long.parseLong(leaf.toString()))); } } } else { diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java index 8bf4766d580e..479015f6620f 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java @@ -27,17 +27,7 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.And; -import org.apache.paimon.predicate.CompoundPredicate; -import org.apache.paimon.predicate.Equal; -import org.apache.paimon.predicate.GreaterOrEqual; -import org.apache.paimon.predicate.GreaterThan; -import org.apache.paimon.predicate.LeafPredicate; -import org.apache.paimon.predicate.LeafPredicateExtractor; -import org.apache.paimon.predicate.LessOrEqual; -import org.apache.paimon.predicate.LessThan; -import org.apache.paimon.predicate.Or; -import org.apache.paimon.predicate.Predicate; +import org.apache.paimon.predicate.*; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; @@ -231,18 +221,11 @@ public InnerTableRead withFilter(Predicate predicate) { } // optimize for IN filter - if ((compoundPredicate.function()) instanceof Or) { - for (Predicate leaf : children) { - if (leaf instanceof LeafPredicate - && (((LeafPredicate) leaf).function() instanceof Equal) - && leaf.visit(LeafPredicateExtractor.INSTANCE).get(leafName) - != null) { - snapshotIds.add((Long) ((LeafPredicate) leaf).literals().get(0)); - } else { - snapshotIds.clear(); - break; - } - } + Optional> leafs = + InPredicateVisitor.extractInElements(predicate, leafName); + if (leafs.isPresent()) { + leafs.get().stream() + .forEach(leaf -> snapshotIds.add(Long.parseLong(leaf.toString()))); } } else { handleLeafPredicate(predicate, leafName); diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java index f3342e9f2cb3..ae5cb2769e22 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java @@ -26,12 +26,7 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.CompoundPredicate; -import org.apache.paimon.predicate.Equal; -import org.apache.paimon.predicate.LeafPredicate; -import org.apache.paimon.predicate.LeafPredicateExtractor; -import org.apache.paimon.predicate.Or; -import org.apache.paimon.predicate.Predicate; +import org.apache.paimon.predicate.*; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; @@ -239,25 +234,18 @@ public RecordReader createReader(Split split) { CompoundPredicate compoundPredicate = (CompoundPredicate) predicate; // optimize for IN filter if ((compoundPredicate.function()) instanceof Or) { - List children = compoundPredicate.children(); - for (Predicate leaf : children) { - if (leaf instanceof LeafPredicate - && (((LeafPredicate) leaf).function() instanceof Equal - && ((LeafPredicate) leaf).literals().get(0) - instanceof BinaryString) - && predicate - .visit(LeafPredicateExtractor.INSTANCE) - .get(TAG_NAME) - != null) { - String equalValue = - ((LeafPredicate) leaf).literals().get(0).toString(); - if (tagManager.tagExists(equalValue)) { - predicateMap.put(equalValue, tagManager.tag(equalValue)); - } - } else { - predicateMap.clear(); - break; - } + Optional> leafs = + InPredicateVisitor.extractInElements(predicate, TAG_NAME); + if (leafs.isPresent()) { + leafs.get().stream() + .forEach( + leaf -> { + if (tagManager.tagExists(leaf.toString())) { + predicateMap.put( + leaf.toString(), + tagManager.tag(leaf.toString())); + } + }); } } } From f3f4c1b3e8235ae1de13ab917d1bb48b69159837 Mon Sep 17 00:00:00 2001 From: xuzifu666 <1206332514@qq.com> Date: Sat, 9 Nov 2024 16:41:56 +0800 Subject: [PATCH 2/7] fix imports --- .../apache/paimon/table/system/SchemasTable.java | 13 ++++++++++++- .../apache/paimon/table/system/SnapshotsTable.java | 12 +++++++++++- .../org/apache/paimon/table/system/TagsTable.java | 9 ++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java index f7bb46236393..6ab4333928d1 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java @@ -26,7 +26,18 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.*; +import org.apache.paimon.predicate.And; +import org.apache.paimon.predicate.CompoundPredicate; +import org.apache.paimon.predicate.Equal; +import org.apache.paimon.predicate.GreaterOrEqual; +import org.apache.paimon.predicate.GreaterThan; +import org.apache.paimon.predicate.InPredicateVisitor; +import org.apache.paimon.predicate.LeafPredicate; +import org.apache.paimon.predicate.LeafPredicateExtractor; +import org.apache.paimon.predicate.LessOrEqual; +import org.apache.paimon.predicate.LessThan; +import org.apache.paimon.predicate.Or; +import org.apache.paimon.predicate.Predicate; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.schema.SchemaManager; import org.apache.paimon.schema.TableSchema; diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java index 479015f6620f..b543b27486ab 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java @@ -27,7 +27,17 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.*; +import org.apache.paimon.predicate.And; +import org.apache.paimon.predicate.CompoundPredicate; +import org.apache.paimon.predicate.Equal; +import org.apache.paimon.predicate.GreaterOrEqual; +import org.apache.paimon.predicate.GreaterThan; +import org.apache.paimon.predicate.InPredicateVisitor; +import org.apache.paimon.predicate.LeafPredicate; +import org.apache.paimon.predicate.LeafPredicateExtractor; +import org.apache.paimon.predicate.LessOrEqual; +import org.apache.paimon.predicate.LessThan; +import org.apache.paimon.predicate.Predicate; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java index ae5cb2769e22..d3f329262906 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java @@ -26,7 +26,14 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.*; +import org.apache.paimon.predicate.CompoundPredicate; +import org.apache.paimon.predicate.Equal; +import org.apache.paimon.predicate.InPredicateVisitor; +import org.apache.paimon.predicate.LeafPredicate; +import org.apache.paimon.predicate.LeafPredicateExtractor; +import org.apache.paimon.predicate.Or; +import org.apache.paimon.predicate.Predicate; + import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; From 6b81bf4459b346cd80a7d266ba8da3351ec6521d Mon Sep 17 00:00:00 2001 From: xuzifu666 <1206332514@qq.com> Date: Sat, 9 Nov 2024 16:44:26 +0800 Subject: [PATCH 3/7] fix ut --- .../test/java/org/apache/paimon/flink/CatalogTableITCase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/CatalogTableITCase.java b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/CatalogTableITCase.java index 9c1a2f4e3918..34c00a3703f5 100644 --- a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/CatalogTableITCase.java +++ b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/CatalogTableITCase.java @@ -298,7 +298,7 @@ public void testSchemasTable() { result = sql( "SELECT schema_id, fields, partition_keys, " - + "primary_keys, options, `comment` FROM T$schemas where schema_id>0 and schema_id<3"); + + "primary_keys, options, `comment` FROM T$schemas where schema_id>0 and schema_id<3 order by schema_id"); assertThat(result.toString()) .isEqualTo( "[+I[1, [{\"id\":0,\"name\":\"a\",\"type\":\"INT NOT NULL\"}," @@ -312,7 +312,7 @@ public void testSchemasTable() { result = sql( "SELECT schema_id, fields, partition_keys, " - + "primary_keys, options, `comment` FROM T$schemas where schema_id in (1, 3)"); + + "primary_keys, options, `comment` FROM T$schemas where schema_id in (1, 3) order by schema_id"); assertThat(result.toString()) .isEqualTo( "[+I[1, [{\"id\":0,\"name\":\"a\",\"type\":\"INT NOT NULL\"}," From c87f00c0b7e1cedfd0b33f701f583158d3826ec2 Mon Sep 17 00:00:00 2001 From: xuzifu666 <1206332514@qq.com> Date: Sat, 9 Nov 2024 16:47:48 +0800 Subject: [PATCH 4/7] fix style --- .../src/main/java/org/apache/paimon/table/system/TagsTable.java | 1 - 1 file changed, 1 deletion(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java index d3f329262906..d34038cd55e3 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java @@ -33,7 +33,6 @@ import org.apache.paimon.predicate.LeafPredicateExtractor; import org.apache.paimon.predicate.Or; import org.apache.paimon.predicate.Predicate; - import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; From 324a6b974925cf2773bc4d544b9cd9adc10ee24c Mon Sep 17 00:00:00 2001 From: xuyu <11161569@vivo.com> Date: Mon, 11 Nov 2024 09:19:39 +0800 Subject: [PATCH 5/7] address --- .../paimon/predicate/InPredicateVisitor.java | 2 +- .../paimon/table/system/SchemasTable.java | 14 +++++----- .../paimon/table/system/SnapshotsTable.java | 26 +++++++------------ .../apache/paimon/table/system/TagsTable.java | 25 +++++++++--------- 4 files changed, 31 insertions(+), 36 deletions(-) diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java index 518cb1eeb5fe..9f0985c09d1e 100644 --- a/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java +++ b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java @@ -26,7 +26,7 @@ public class InPredicateVisitor { /** - * Method for handling with CompoundPredicate. + * Method for handling with In CompoundPredicate * * @param predicate CompoundPredicate to traverse handle * @param leafName LeafPredicate name diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java index 6ab4333928d1..86e2598c609c 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java @@ -230,12 +230,14 @@ public InnerTableRead withFilter(Predicate predicate) { // optimize for IN filter if ((compoundPredicate.function()) instanceof Or) { - Optional> leafs = - InPredicateVisitor.extractInElements(predicate, leafName); - if (leafs.isPresent()) { - leafs.get().stream() - .forEach(leaf -> schemaIds.add(Long.parseLong(leaf.toString()))); - } + InPredicateVisitor.extractInElements(predicate, leafName) + .ifPresent( + leafs -> + leafs.forEach( + leaf -> + schemaIds.add( + Long.parseLong( + leaf.toString())))); } } else { handleLeafPredicate(predicate, leafName); diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java index b543b27486ab..c66228aeca6a 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java @@ -27,17 +27,7 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.And; -import org.apache.paimon.predicate.CompoundPredicate; -import org.apache.paimon.predicate.Equal; -import org.apache.paimon.predicate.GreaterOrEqual; -import org.apache.paimon.predicate.GreaterThan; -import org.apache.paimon.predicate.InPredicateVisitor; -import org.apache.paimon.predicate.LeafPredicate; -import org.apache.paimon.predicate.LeafPredicateExtractor; -import org.apache.paimon.predicate.LessOrEqual; -import org.apache.paimon.predicate.LessThan; -import org.apache.paimon.predicate.Predicate; +import org.apache.paimon.predicate.*; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable; @@ -231,11 +221,15 @@ public InnerTableRead withFilter(Predicate predicate) { } // optimize for IN filter - Optional> leafs = - InPredicateVisitor.extractInElements(predicate, leafName); - if (leafs.isPresent()) { - leafs.get().stream() - .forEach(leaf -> snapshotIds.add(Long.parseLong(leaf.toString()))); + if ((compoundPredicate.function()) instanceof Or) { + InPredicateVisitor.extractInElements(predicate, leafName) + .ifPresent( + leafs -> + leafs.forEach( + leaf -> + snapshotIds.add( + Long.parseLong( + leaf.toString())))); } } else { handleLeafPredicate(predicate, leafName); diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java index d34038cd55e3..4d1b4e22ab18 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/TagsTable.java @@ -240,19 +240,18 @@ public RecordReader createReader(Split split) { CompoundPredicate compoundPredicate = (CompoundPredicate) predicate; // optimize for IN filter if ((compoundPredicate.function()) instanceof Or) { - Optional> leafs = - InPredicateVisitor.extractInElements(predicate, TAG_NAME); - if (leafs.isPresent()) { - leafs.get().stream() - .forEach( - leaf -> { - if (tagManager.tagExists(leaf.toString())) { - predicateMap.put( - leaf.toString(), - tagManager.tag(leaf.toString())); - } - }); - } + InPredicateVisitor.extractInElements(predicate, TAG_NAME) + .ifPresent( + leafs -> + leafs.forEach( + leaf -> { + String leftName = leaf.toString(); + if (tagManager.tagExists(leftName)) { + predicateMap.put( + leftName, + tagManager.tag(leftName)); + } + })); } } } From 1205ac8567d34877711b81866f4711f8299ddd5c Mon Sep 17 00:00:00 2001 From: xuyu <11161569@vivo.com> Date: Mon, 11 Nov 2024 09:22:40 +0800 Subject: [PATCH 6/7] address --- .../java/org/apache/paimon/predicate/InPredicateVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java index 9f0985c09d1e..dbd31dd2d191 100644 --- a/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java +++ b/paimon-common/src/main/java/org/apache/paimon/predicate/InPredicateVisitor.java @@ -26,7 +26,7 @@ public class InPredicateVisitor { /** - * Method for handling with In CompoundPredicate + * Method for handling with In CompoundPredicate. * * @param predicate CompoundPredicate to traverse handle * @param leafName LeafPredicate name From e73322bed523101f725c0b56abd649dcd1fa0740 Mon Sep 17 00:00:00 2001 From: xuyu <11161569@vivo.com> Date: Mon, 11 Nov 2024 09:26:29 +0800 Subject: [PATCH 7/7] fix --- .../apache/paimon/table/system/SnapshotsTable.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java index c66228aeca6a..a95843219440 100644 --- a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java +++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java @@ -27,7 +27,18 @@ import org.apache.paimon.disk.IOManager; import org.apache.paimon.fs.FileIO; import org.apache.paimon.fs.Path; -import org.apache.paimon.predicate.*; +import org.apache.paimon.predicate.And; +import org.apache.paimon.predicate.CompoundPredicate; +import org.apache.paimon.predicate.Equal; +import org.apache.paimon.predicate.GreaterOrEqual; +import org.apache.paimon.predicate.GreaterThan; +import org.apache.paimon.predicate.InPredicateVisitor; +import org.apache.paimon.predicate.LeafPredicate; +import org.apache.paimon.predicate.LeafPredicateExtractor; +import org.apache.paimon.predicate.LessOrEqual; +import org.apache.paimon.predicate.LessThan; +import org.apache.paimon.predicate.Or; +import org.apache.paimon.predicate.Predicate; import org.apache.paimon.reader.RecordReader; import org.apache.paimon.table.FileStoreTable; import org.apache.paimon.table.ReadonlyTable;