This is an automated email from the ASF dual-hosted git repository.

XiaoHongbo-Hope pushed a commit to branch release-2.1
in repository https://gitbox.apache.org/repos/asf/paimon.git

commit 7af936ce6aefcbd94610f28a6ad3a9b9c6a2ab11
Author: jackylee <[email protected]>
AuthorDate: Thu Sep 17 14:44:04 2026 +0800

    [core] Add compression extension to text format data file names (#9853)
---
 .../org/apache/paimon/io/DataFilePathFactory.java  |  8 ++++++--
 .../apache/paimon/io/DataFilePathFactoryTest.java  | 22 ++++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/io/DataFilePathFactory.java 
b/paimon-core/src/main/java/org/apache/paimon/io/DataFilePathFactory.java
index 33068859dc..7c53ebf6b8 100644
--- a/paimon-core/src/main/java/org/apache/paimon/io/DataFilePathFactory.java
+++ b/paimon-core/src/main/java/org/apache/paimon/io/DataFilePathFactory.java
@@ -18,6 +18,7 @@
 
 package org.apache.paimon.io;
 
+import org.apache.paimon.CoreOptions;
 import org.apache.paimon.annotation.VisibleForTesting;
 import org.apache.paimon.format.HadoopCompressionType;
 import org.apache.paimon.fs.ExternalPathProvider;
@@ -207,8 +208,11 @@ public class DataFilePathFactory {
     }
 
     private static boolean isTextFormat(String formatIdentifier) {
-        return "json".equalsIgnoreCase(formatIdentifier)
-                || "csv".equalsIgnoreCase(formatIdentifier);
+        // Keep this list in step with CoreOptions.formatTableFileCompression, 
which groups the
+        // same three formats: they are the ones whose codec is recovered from 
the file name.
+        return CoreOptions.FILE_FORMAT_JSON.equalsIgnoreCase(formatIdentifier)
+                || 
CoreOptions.FILE_FORMAT_CSV.equalsIgnoreCase(formatIdentifier)
+                || 
CoreOptions.FILE_FORMAT_TEXT.equalsIgnoreCase(formatIdentifier);
     }
 
     @Nullable
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/io/DataFilePathFactoryTest.java 
b/paimon-core/src/test/java/org/apache/paimon/io/DataFilePathFactoryTest.java
index d2d0eb8f36..bb24940c3d 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/io/DataFilePathFactoryTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/io/DataFilePathFactoryTest.java
@@ -113,6 +113,28 @@ public class DataFilePathFactoryTest {
         
assertThat(DataFilePathFactory.formatIdentifier(video.getName())).isEqualTo("video");
     }
 
+    @Test
+    public void testTextFormatCarriesTheCompressionExtension() {
+        // A text file is always written through the configured codec, while 
the reader recovers
+        // that codec from the file name alone, so the name has to end with 
the codec extension.
+        // The compression is passed explicitly rather than taken from the 
option default so that
+        // the expected name does not silently change with it.
+        DataFilePathFactory pathFactory =
+                new DataFilePathFactory(
+                        new Path(tempDir + "/bucket-123"),
+                        CoreOptions.FILE_FORMAT_TEXT,
+                        CoreOptions.DATA_FILE_PREFIX.defaultValue(),
+                        CoreOptions.CHANGELOG_FILE_PREFIX.defaultValue(),
+                        
CoreOptions.FILE_SUFFIX_INCLUDE_COMPRESSION.defaultValue(),
+                        "zstd",
+                        null);
+
+        String name = pathFactory.newPath().getName();
+        assertThat(name).endsWith(".text.zst");
+        assertThat(DataFilePathFactory.formatIdentifier(name))
+                .isEqualTo(CoreOptions.FILE_FORMAT_TEXT);
+    }
+
     @Test
     public void testEntropyInjectWithNoPartition() {
         EntropyInjectExternalPathProvider externalPathProvider =

Reply via email to