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;
}