apache/seatunnel · info
Append only table currently do not support dynamic bucket
Error message
Append only table currently do not support dynamic bucket
What it means
In PaimonSinkWriter construction, if the table's bucket mode is BUCKET_UNAWARE (append-only, no bucket assignment) and bucket = -1 (dynamic), the writer warns that append-only tables do not support dynamic bucket. Execution continues without dynamic bucketing; this is informational about the resolved mode.
Solutions
- Set a fixed positive 'bucket' value for the append-only table, or leave default bucket to let Paimon decide.
- Remove bucket = -1 from the sink/table options if you assumed dynamic buckets.
- Convert the table to a primary-key table (or use cross-partition upsert) if you truly need dynamic buckets.
- Ignore the warning if unaware append mode is desired — it is not an error.
Example fix
// before 'bucket' = '-1' // append-only table // after 'bucket' = '4' // fixed bucket count for append-only table
Defensive patterns
Strategy: validation
Validate before calling
boolean appendOnly = !tableOptions.containsKey("primary-key");
if (appendOnly && "-1".equals(tableOptions.get("bucket"))) throw new IllegalStateException("Append-only table cannot use dynamic bucket; set a fixed bucket"); Prevention
- Set explicit bucket for append-only tables
- Do not copy primary-key table bucket=-1 config to append tables
- Understand Paimon BucketMode per table type
When it happens
Trigger: Creating a Paimon sink writer on an append-only table (write-mode append / primary-key absent) with bucket = -1 and bucketMode resolving to BUCKET_UNAWARE.
Common situations: Copying a primary-key table config (bucket = -1 for dynamic buckets) onto an append-only table; defaulting bucket to -1 hoping for auto-scaling buckets on append tables.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- ${CommonError.convertToConnectorPropsBlankError(Paimon…
- configured the props named 'changelog-producer' which is…
- is required
- The value of is required
- WRITE_PROPS_BUCKET_KEY_ERROR
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/81d8e559fda184d4.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/sink/PaimonSinkWriter.java:177
(IOManagerImpl)
IOManager.create(splitPaths(paimonSinkConfig.getChangelogTmpPath()));
this.newTableWrite();
BucketMode bucketMode = this.paimonTable.bucketMode();
// https://paimon.apache.org/docs/master/primary-key-table/data-distribution/#dynamic-bucket
// When you need cross partition upsert (primary keys not contain all partition fields),
// Dynamic Bucket mode directly maintains the mapping of keys to partition and bucket, uses
// local disks, and initializes indexes by reading all existing keys in the table when
// starting job. For tables with a large amount of data, there will be a significant loss in
// performance. Moreover, initialization takes a long time. This mode is not supported at
// this time.
if (BucketMode.CROSS_PARTITION == bucketMode) {
throw new UnsupportedOperationException(
"Cross Partitions Upsert Dynamic Bucket Mode is not supported.");
}
this.dynamicBucket = BucketMode.HASH_DYNAMIC == bucketMode;
int bucket = paimonTable.coreOptions().bucket();
if (bucket == -1 && BucketMode.BUCKET_UNAWARE == bucketMode) {
log.warn("Append only table currently do not support dynamic bucket");
}
if (dynamicBucket) {
paimonBucketAssignerFactory.init(paimonTablePath, paimonFileStoretable, parallelism);
}
PaimonSecurityContext.shouldEnableKerberos(paimonHadoopConfiguration);
}
public PaimonSinkWriter(
Context context,
ReadonlyConfig readonlyConfig,
CatalogTable catalogTable,
Table paimonFileStoretable,
String commitUser,
List<PaimonSinkState> states,
JobContext jobContext,
PaimonSinkConfig paimonSinkConfig,
PaimonHadoopConfiguration paimonHadoopConfiguration,
PaimonBucketAssignerFactory paimonBucketAssignerFactory) {View on GitHub (pinned to cf67b549a7)