diff --git a/paimon-core/src/main/java/org/apache/paimon/schema/SchemaValidation.java b/paimon-core/src/main/java/org/apache/paimon/schema/SchemaValidation.java index 4ffc3ec0259e..b703caaf9b6c 100644 --- a/paimon-core/src/main/java/org/apache/paimon/schema/SchemaValidation.java +++ b/paimon-core/src/main/java/org/apache/paimon/schema/SchemaValidation.java @@ -924,7 +924,8 @@ public static void validateChainTable(TableSchema schema, CoreOptions options) { Preconditions.checkArgument( options.bucket() > 0, "Bucket number must be greater than 0 for chain table."); Preconditions.checkArgument( - options.sequenceField() != null, "Sequence field is required for chain table."); + !options.sequenceField().isEmpty(), + "Sequence field is required for chain table."); Preconditions.checkArgument( changelogProducer == ChangelogProducer.NONE || changelogProducer == ChangelogProducer.INPUT, diff --git a/paimon-core/src/test/java/org/apache/paimon/schema/SchemaValidationTest.java b/paimon-core/src/test/java/org/apache/paimon/schema/SchemaValidationTest.java index d518f79a20f5..89796948f295 100644 --- a/paimon-core/src/test/java/org/apache/paimon/schema/SchemaValidationTest.java +++ b/paimon-core/src/test/java/org/apache/paimon/schema/SchemaValidationTest.java @@ -232,6 +232,29 @@ public void testChainTableAllowsNonDeduplicateMergeEngine() { assertThatNoException().isThrownBy(() -> validateTableSchema(schema)); } + @Test + public void testChainTableRequiresSequenceField() { + Map options = new HashMap<>(); + options.put(CoreOptions.CHAIN_TABLE_ENABLED.key(), "true"); + options.put(CoreOptions.BUCKET.key(), "1"); + options.put(CoreOptions.PARTITION_TIMESTAMP_PATTERN.key(), "$f0"); + options.put(CoreOptions.PARTITION_TIMESTAMP_FORMATTER.key(), "yyyy-MM-dd"); + + List fields = + Arrays.asList( + new DataField(0, "f0", DataTypes.STRING()), + new DataField(1, "f1", DataTypes.INT()), + new DataField(2, "f2", DataTypes.BIGINT()), + new DataField(3, "f3", DataTypes.STRING())); + List partitionKeys = singletonList("f0"); + List primaryKeys = Arrays.asList("f0", "f1"); + TableSchema schema = + new TableSchema(1, fields, 10, partitionKeys, primaryKeys, options, ""); + + assertThatThrownBy(() -> validateTableSchema(schema)) + .hasMessage("Sequence field is required for chain table."); + } + @Test public void testVectorStoreUnknownColumn() { Map options = new HashMap<>();