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 8706428efd [core] Data Evolution: cache fileFields to speed up (#7112)
8706428efd is described below

commit 8706428efdefd0055044a2f68e98cea181fad30e
Author: YeJunHao <[email protected]>
AuthorDate: Fri Jan 23 17:45:04 2026 +0800

    [core] Data Evolution: cache fileFields to speed up (#7112)
---
 .../paimon/operation/DataEvolutionFileStoreScan.java | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/DataEvolutionFileStoreScan.java
 
b/paimon-core/src/main/java/org/apache/paimon/operation/DataEvolutionFileStoreScan.java
index db9e5db807..ef1ea82ce9 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/DataEvolutionFileStoreScan.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/DataEvolutionFileStoreScan.java
@@ -34,6 +34,7 @@ import org.apache.paimon.stats.SimpleStats;
 import org.apache.paimon.table.SpecialFields;
 import org.apache.paimon.types.DataField;
 import org.apache.paimon.types.RowType;
+import org.apache.paimon.utils.Pair;
 import org.apache.paimon.utils.Range;
 import org.apache.paimon.utils.RangeHelper;
 import org.apache.paimon.utils.SnapshotManager;
@@ -44,6 +45,8 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.function.Function;
 import java.util.function.ToLongFunction;
 import java.util.stream.Collectors;
@@ -54,6 +57,8 @@ import static 
org.apache.paimon.utils.Preconditions.checkNotNull;
 /** {@link FileStoreScan} for data-evolution enabled table. */
 public class DataEvolutionFileStoreScan extends AppendOnlyFileStoreScan {
 
+    private final ConcurrentMap<Pair<Long, List<String>>, List<String>> 
fileFields;
+
     private boolean dropStats = false;
     @Nullable private RowType readType;
 
@@ -76,6 +81,8 @@ public class DataEvolutionFileStoreScan extends 
AppendOnlyFileStoreScan {
                 scanManifestParallelism,
                 false,
                 deletionVectorsEnabled);
+
+        this.fileFields = new ConcurrentHashMap<>();
     }
 
     @Override
@@ -241,10 +248,17 @@ public class DataEvolutionFileStoreScan extends 
AppendOnlyFileStoreScan {
 
         if (readType != null) {
             boolean containsReadCol = false;
-            RowType fileType =
-                    
scanTableSchema(file.schemaId()).project(file.writeCols()).logicalRowType();
+            List<String> fileFieldNmes =
+                    fileFields.computeIfAbsent(
+                            Pair.of(file.schemaId(), file.writeCols()),
+                            pair ->
+                                    scanTableSchema(file.schemaId())
+                                            .project(file.writeCols())
+                                            .logicalRowType()
+                                            .getFieldNames());
+
             for (String field : readType.getFieldNames()) {
-                if (fileType.containsField(field)) {
+                if (fileFieldNmes.contains(field)) {
                     containsReadCol = true;
                     break;
                 }

Reply via email to