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 1cf5376b37 [core] enable set table config for ExpirePartitionsAction 
(#5639)
1cf5376b37 is described below

commit 1cf5376b376bf23db61eee9b4d5275e7dd01a155
Author: LsomeYeah <[email protected]>
AuthorDate: Tue May 20 19:25:09 2025 +0800

    [core] enable set table config for ExpirePartitionsAction (#5639)
---
 .../flink/action/ExpirePartitionsAction.java       |  2 +
 .../action/ExpirePartitionsActionFactory.java      |  1 +
 .../flink/action/ExpirePartitionsActionITCase.java | 59 ++++++++++++++++++++++
 3 files changed, 62 insertions(+)

diff --git 
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsAction.java
 
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsAction.java
index cc98303bd5..a77729119d 100644
--- 
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsAction.java
+++ 
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsAction.java
@@ -39,6 +39,7 @@ public class ExpirePartitionsAction extends TableActionBase {
             String databaseName,
             String tableName,
             Map<String, String> catalogConfig,
+            Map<String, String> tableConfig,
             String expirationTime,
             String timestampFormatter,
             String timestampPattern,
@@ -50,6 +51,7 @@ public class ExpirePartitionsAction extends TableActionBase {
                             "Only FileStoreTable supports expire_partitions 
action. The table type is '%s'.",
                             table.getClass().getName()));
         }
+        table = table.copy(tableConfig);
         Map<String, String> map = new HashMap<>();
         map.put(CoreOptions.PARTITION_EXPIRATION_STRATEGY.key(), 
expireStrategy);
         map.put(CoreOptions.PARTITION_TIMESTAMP_FORMATTER.key(), 
timestampFormatter);
diff --git 
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsActionFactory.java
 
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsActionFactory.java
index 3db3a757d8..52e8e097f2 100644
--- 
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsActionFactory.java
+++ 
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/action/ExpirePartitionsActionFactory.java
@@ -40,6 +40,7 @@ public class ExpirePartitionsActionFactory implements 
ActionFactory {
                         params.getRequired(DATABASE),
                         params.getRequired(TABLE),
                         catalogConfigMap(params),
+                        optionalConfigMap(params, TABLE_CONF),
                         params.getRequired(EXPIRATIONTIME),
                         params.getRequired(TIMESTAMPFORMATTER),
                         timestampPattern,
diff --git 
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/action/ExpirePartitionsActionITCase.java
 
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/action/ExpirePartitionsActionITCase.java
index 9077204c0d..70a5de6355 100644
--- 
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/action/ExpirePartitionsActionITCase.java
+++ 
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/action/ExpirePartitionsActionITCase.java
@@ -124,6 +124,65 @@ public class ExpirePartitionsActionITCase extends 
ActionITCaseBase {
         assertThat(actual).isEqualTo(expected);
     }
 
+    @Test
+    public void testExpirePartitionsWithTableConf() throws Exception {
+        FileStoreTable table = prepareTable();
+        // prepare more data
+        writeData(
+                rowData(
+                        BinaryString.fromString("3"),
+                        BinaryString.fromString("2024-01-01"),
+                        BinaryString.fromString("02:00")));
+        writeData(
+                rowData(
+                        BinaryString.fromString("4"),
+                        BinaryString.fromString("2024-01-02"),
+                        BinaryString.fromString("01:00")));
+
+        TableScan.Plan plan = table.newReadBuilder().newScan().plan();
+        List<String> actual = getResult(table.newReadBuilder().newRead(), 
plan.splits(), ROW_TYPE);
+        List<String> expected;
+        expected =
+                Arrays.asList(
+                        "+I[1, 2024-01-01, 01:00]",
+                        "+I[2, 9999-09-20, 02:00]",
+                        "+I[3, 2024-01-01, 02:00]",
+                        "+I[4, 2024-01-02, 01:00]");
+
+        assertThat(actual).isEqualTo(expected);
+
+        // only expire one partition
+        createAction(
+                        ExpirePartitionsAction.class,
+                        "expire_partitions",
+                        "--warehouse",
+                        warehouse,
+                        "--database",
+                        database,
+                        "--table",
+                        tableName,
+                        "--expiration_time",
+                        "1 d",
+                        "--timestamp_formatter",
+                        "yyyy-MM-dd",
+                        "--timestamp_pattern",
+                        "$dt",
+                        "--table_conf",
+                        "partition.expiration-max-num=1")
+                .run();
+
+        plan = table.newReadBuilder().newScan().plan();
+        actual = getResult(table.newReadBuilder().newRead(), plan.splits(), 
ROW_TYPE);
+
+        expected =
+                Arrays.asList(
+                        "+I[2, 9999-09-20, 02:00]",
+                        "+I[3, 2024-01-01, 02:00]",
+                        "+I[4, 2024-01-02, 01:00]");
+
+        assertThat(actual).isEqualTo(expected);
+    }
+
     private FileStoreTable prepareTable() throws Exception {
         init(warehouse);
 

Reply via email to