This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 61ff9a5e5e [core] Improve codes for FileIndexEvaluator evaluate
61ff9a5e5e is described below
commit 61ff9a5e5e7eb1df0b9685cc69594e426da069d3
Author: JingsongLi <[email protected]>
AuthorDate: Wed Aug 20 12:33:01 2025 +0800
[core] Improve codes for FileIndexEvaluator evaluate
---
.../org/apache/paimon/io/FileIndexEvaluator.java | 53 ++++++++++++----------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git
a/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
b/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
index bf04b453af..457212ddcb 100644
--- a/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
+++ b/paimon-core/src/main/java/org/apache/paimon/io/FileIndexEvaluator.java
@@ -28,7 +28,6 @@ import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.predicate.PredicateBuilder;
import org.apache.paimon.predicate.TopN;
import org.apache.paimon.schema.TableSchema;
-import org.apache.paimon.utils.ListUtils;
import org.apache.paimon.utils.RoaringBitmap32;
import javax.annotation.Nullable;
@@ -38,6 +37,8 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
+import static org.apache.paimon.utils.ListUtils.isNullOrEmpty;
+
/** Evaluate file index result. */
public class FileIndexEvaluator {
@@ -50,44 +51,48 @@ public class FileIndexEvaluator {
DataFileMeta file,
@Nullable DeletionVector deletionVector)
throws IOException {
- if (ListUtils.isNullOrEmpty(dataFilter) && topN == null) {
+ if (isNullOrEmpty(dataFilter) && topN == null) {
return FileIndexResult.REMAIN;
}
- FileIndexResult selection =
- new BitmapIndexResult(() -> RoaringBitmap32.bitmapOfRange(0,
file.rowCount()));
- if (deletionVector instanceof BitmapDeletionVector) {
- RoaringBitmap32 deletion = ((BitmapDeletionVector)
deletionVector).get();
- selection = ((BitmapIndexResult) selection).andNot(deletion);
- }
-
try (FileIndexPredicate predicate =
createFileIndexPredicate(fileIO, dataSchema,
dataFilePathFactory, file)) {
- FileIndexResult result = FileIndexResult.REMAIN;
- if (predicate != null) {
- if (!ListUtils.isNullOrEmpty(dataFilter)) {
- Predicate filter =
PredicateBuilder.and(dataFilter.toArray(new Predicate[0]));
- result = predicate.evaluate(filter);
- result.and(selection);
- } else if (topN != null) {
- result = predicate.evaluateTopN(topN, selection);
- }
+ if (predicate == null) {
+ return FileIndexResult.REMAIN;
+ }
+
+ FileIndexResult selection =
+ new BitmapIndexResult(() ->
RoaringBitmap32.bitmapOfRange(0, file.rowCount()));
+ if (deletionVector instanceof BitmapDeletionVector) {
+ RoaringBitmap32 deletion = ((BitmapDeletionVector)
deletionVector).get();
+ selection = ((BitmapIndexResult) selection).andNot(deletion);
+ }
+ FileIndexResult result;
+ if (!isNullOrEmpty(dataFilter)) {
+ Predicate filter = PredicateBuilder.and(dataFilter.toArray(new
Predicate[0]));
+ result = predicate.evaluate(filter);
+ result.and(selection);
+ } else if (topN != null) {
+ result = predicate.evaluateTopN(topN, selection);
+ } else {
+ return FileIndexResult.REMAIN;
+ }
- // if all position selected, or if only and not the deletion
- // the effect will not obvious, just return REMAIN.
- if (Objects.equals(result, selection)) {
- result = FileIndexResult.REMAIN;
- }
+ // if all position selected, or if only and not the deletion
+ // the effect will not obvious, just return REMAIN.
+ if (Objects.equals(result, selection)) {
+ return FileIndexResult.REMAIN;
}
if (!result.remain()) {
- result = FileIndexResult.SKIP;
+ return FileIndexResult.SKIP;
}
return result;
}
}
+ @Nullable
private static FileIndexPredicate createFileIndexPredicate(
FileIO fileIO,
TableSchema dataSchema,