Skip to content

Commit 9f9b8db

Browse files
[core] Skip partition-specific table-default options for non-partitioned tables (apache#7681)
1 parent 9807fe4 commit 9f9b8db

3 files changed

Lines changed: 46 additions & 10 deletions

File tree

paimon-core/src/main/java/org/apache/paimon/schema/SchemaValidation.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,6 @@ public static void validateTableSchema(TableSchema schema) {
204204
CoreOptions.STREAMING_READ_APPEND_OVERWRITE.key()));
205205
}
206206

207-
if (schema.options().containsKey(CoreOptions.PARTITION_EXPIRATION_TIME.key())) {
208-
if (schema.partitionKeys().isEmpty()) {
209-
throw new IllegalArgumentException(
210-
"Can not set 'partition.expiration-time' for non-partitioned table.");
211-
}
212-
}
213-
214207
String recordLevelTimeField = options.recordLevelTimeField();
215208
if (recordLevelTimeField != null) {
216209
Optional<DataField> field =

paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,4 +2159,47 @@ private void baseAlterTable(Map<String, String> initOptions) throws Exception {
21592159
.satisfies(anyCauseMatches("Cannot change nullability of primary key"));
21602160
catalog.dropTable(identifier, false);
21612161
}
2162+
2163+
@Test
2164+
void testTableDefaultPartitionOptionsOnNonPartitionedTable() throws Exception {
2165+
Catalog root =
2166+
catalog instanceof DelegateCatalog ? DelegateCatalog.rootCatalog(catalog) : catalog;
2167+
if (!(root instanceof AbstractCatalog)) {
2168+
return;
2169+
}
2170+
((AbstractCatalog) root).tableDefaultOptions.put("partition.expiration-time", "7d");
2171+
2172+
catalog.createDatabase("test_db_default", false);
2173+
Identifier identifier = Identifier.create("test_db_default", "non_partitioned");
2174+
Schema schema =
2175+
Schema.newBuilder()
2176+
.column("id", DataTypes.INT())
2177+
.column("name", DataTypes.STRING())
2178+
.build();
2179+
assertThatCode(() -> catalog.createTable(identifier, schema, false))
2180+
.doesNotThrowAnyException();
2181+
}
2182+
2183+
@Test
2184+
void testTableDefaultPartitionOptionsOnPartitionedTable() throws Exception {
2185+
Catalog root =
2186+
catalog instanceof DelegateCatalog ? DelegateCatalog.rootCatalog(catalog) : catalog;
2187+
if (!(root instanceof AbstractCatalog)) {
2188+
return;
2189+
}
2190+
((AbstractCatalog) root).tableDefaultOptions.put("partition.expiration-time", "7d");
2191+
2192+
catalog.createDatabase("test_db_default_partitioned", false);
2193+
Identifier identifier = Identifier.create("test_db_default_partitioned", "partitioned");
2194+
Schema schema =
2195+
Schema.newBuilder()
2196+
.column("id", DataTypes.INT())
2197+
.column("pt", DataTypes.STRING())
2198+
.partitionKeys("pt")
2199+
.build();
2200+
catalog.createTable(identifier, schema, false);
2201+
2202+
assertThat(catalog.getTable(identifier).options())
2203+
.containsEntry("partition.expiration-time", "7d");
2204+
}
21622205
}

paimon-core/src/test/java/org/apache/paimon/operation/PartitionExpireTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import static org.apache.paimon.CoreOptions.WRITE_ONLY;
8484
import static org.apache.paimon.CoreOptions.createCommitUser;
8585
import static org.assertj.core.api.Assertions.assertThat;
86+
import static org.assertj.core.api.Assertions.assertThatCode;
8687
import static org.assertj.core.api.Assertions.assertThatThrownBy;
8788

8889
/** Test for {@link PartitionExpire}. */
@@ -158,7 +159,7 @@ public PartitionModification partitionModification() {
158159
@Test
159160
public void testNonPartitionedTable() {
160161
SchemaManager schemaManager = new SchemaManager(LocalFileIO.create(), path);
161-
assertThatThrownBy(
162+
assertThatCode(
162163
() ->
163164
schemaManager.createTable(
164165
new Schema(
@@ -168,8 +169,7 @@ public void testNonPartitionedTable() {
168169
Collections.singletonMap(
169170
PARTITION_EXPIRATION_TIME.key(), "1 d"),
170171
"")))
171-
.hasMessageContaining(
172-
"Can not set 'partition.expiration-time' for non-partitioned table");
172+
.doesNotThrowAnyException();
173173
}
174174

175175
@Test

0 commit comments

Comments
 (0)