apache/seatunnel · error · HudiConnectorException
UNSUPPORTED_OPERATION
UNSUPPORTED_OPERATION
Error message
Unsupported operation type: ${opType} What it means
executeWrite() dispatches to the Hudi write client based on the configured operation type (upsert, bulk_insert); any other configured opType hits default and throws HudiConnectorException with UNSUPPORTED_OPERATION because the connector does not implement that operation.
Source
Thrown at seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/sink/writer/HudiRecordWriter.java:182
buffer.clear();
}
private void executeWrite() {
HoodieJavaWriteClient<HoodieAvroPayload> writeClient = clientProvider.getOrCreateClient();
String writeInstantTime = writeClient.startCommit();
// write records
switch (hudiTableConfig.getOpType()) {
case INSERT:
writeClient.insert(writeRecords, writeInstantTime);
break;
case UPSERT:
writeClient.upsert(writeRecords, writeInstantTime);
break;
case BULK_INSERT:
writeClient.bulkInsert(writeRecords, writeInstantTime);
break;
default:
throw new HudiConnectorException(
HudiErrorCode.UNSUPPORTED_OPERATION,
"Unsupported operation type: " + hudiTableConfig.getOpType());
}
writeRecords.clear();
}
private void executeDelete() {
HoodieJavaWriteClient<HoodieAvroPayload> writeClient = clientProvider.getOrCreateClient();
writeClient.delete(deleteRecordKeys, writeClient.startCommit());
deleteRecordKeys.clear();
}
protected void prepareRecords(SeaTunnelRow element) {
HoodieRecord<HoodieAvroPayload> hoodieAvroPayloadHoodieRecord =
recordConverter.convertRow(schema, seaTunnelRowType, element, hudiTableConfig);
HoodieKey recordKey = hoodieAvroPayloadHoodieRecord.getKey();
boolean changeFlag = changeFlag(element.getRowKind());
buffer.put(recordKey, Pair.of(changeFlag, hoodieAvroPayloadHoodieRecord));View on GitHub (pinned to cf67b549a7)
Solutions
- Set the op_type config to one of the supported values (upsert or bulk_insert)
- Correct typos/case in the op_type value in the job config
- Check the connector docs for the list of supported operation types
Example fix
// before "op_type" = "insert_overwrite" // after "op_type" = "upsert"
Defensive patterns
Strategy: validation
Validate before calling
String op = config.get("op_type");
if (!"upsert".equalsIgnoreCase(op) && !"bulk_insert".equalsIgnoreCase(op)) {
throw new IllegalArgumentException("op_type must be upsert or bulk_insert, got: " + op);
} Try / catch
try {
sink.writeRecord(row);
} catch (HudiConnectorException e) {
if (HudiErrorCode.UNSUPPORTED_OPERATION.equals(e.getPluginErrorCode())) {
LOG.error("Fix op_type config; supported: upsert, bulk_insert");
} else { throw e; }
} Prevention
- Copy op_type values only from the connector's documented option list
- Validate the full sink config against option definitions before submit
- Do not reuse op_type values from other connectors
When it happens
Trigger: hudiTableConfig.getOpType() returns a value other than UPSERT or BULK_INSERT (e.g. INSERT, DELETE, INSERT_OVERWRITE) when flush() triggers executeWrite.
Common situations: Typo or unsupported value in the op_type config option; copying a config from another connector; newer Hudi op types not mapped by this connector version.
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
- Hudi catalog not support truncate table.
- Please configure unique `table_name`, not allow null/duplica
- Please configure `table_name`, not allow null table name in
- Please configure `record_key_fields` of ${tableName}, it is
- TABLE_CONFIG_NOT_FOUND
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/ca0bcbb09babf608.
Report an issue: GitHub.