apache/seatunnel · error · java.lang.UnsupportedOperationException
Unsupported type:
Error message
Unsupported type:
What it means
SeaTunnelRowDebeziumDeserializationConverters.createNotNullConverter() builds a converter per SeaTunnel SQL type. Only the defined SQL types are handled; anything falling through (including MAP, and the default case) throws UnsupportedOperationException 'Unsupported type'. The CDC row deserializer simply has no mapping for that SeaTunnel type.
Source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/debezium/row/SeaTunnelRowDebeziumDeserializationConverters.java:187
return convertToTimestampTz(serverTimeZone);
case FLOAT:
return wrapNumericConverter(convertToFloat());
case DOUBLE:
return wrapNumericConverter(convertToDouble());
case STRING:
return convertToString();
case BYTES:
return convertToBinary();
case DECIMAL:
return wrapNumericConverter(createDecimalConverter());
case ROW:
return createRowConverter(
(SeaTunnelRowType) type, serverTimeZone, userDefinedConverterFactory);
case ARRAY:
return createArrayConverter(type);
case MAP:
default:
throw new UnsupportedOperationException("Unsupported type: " + type);
}
}
@VisibleForTesting
protected static DebeziumDeserializationConverter createArrayConverter(
SeaTunnelDataType<?> type) {
SeaTunnelDataType elementType = ((ArrayType) type).getElementType();
switch (elementType.getSqlType()) {
case BOOLEAN:
return (dbzObj, schema) ->
convertListToArray((List<Boolean>) dbzObj, Boolean.class);
case SMALLINT:
return (dbzObj, schema) -> convertListToArray((List<Short>) dbzObj, Short.class);
case INT:
return (dbzObj, schema) ->
convertListToArray((List<Integer>) dbzObj, Integer.class);
case BIGINT:
return (dbzObj, schema) -> convertListToArray((List<Long>) dbzObj, Long.class);View on GitHub (pinned to cf67b549a7)
Solutions
- Remove or replace the MAP column (and any other unsupported type) in the source schema; use STRING/BYTES/ROW instead.
- Check SeaTunnel CDC docs for the list of supported column types for your database and adjust table_path/schema.
- If the type should be supported, file/patch SeaTunnel to add a converter branch in createNotNullConverter.
Example fix
// before
fields { MAP<STRING,STRING> { ... } } // throws Unsupported type: MAP
// after
fields { STRING metadata_json } Defensive patterns
Strategy: validation
Validate before calling
// Java
static boolean isSupportedCdcType(SeaTunnelDataType<?> t) {
switch (t.getSqlType()) {
case STRING: case BOOLEAN: case TINYINT: case SMALLINT: case INT: case BIGINT:
case FLOAT: case DOUBLE: case DECIMAL: case DATE: case TIME: case TIMESTAMP:
case TIMESTAMP_TZ: case BYTES: case ROW: case ARRAY:
return true;
default:
return false; // e.g. MAP is not supported
}
} Type guard
if (type.getSqlType() == SqlType.MAP) {
throw new IllegalArgumentException("MAP columns are not supported in CDC sources; use STRING/BYTES/ROW");
} Try / catch
try {
converter = createConverter(type, timeZone, factory);
} catch (UnsupportedOperationException e) {
log.error("schema contains unsupported CDC type: {}", type, e);
throw new IllegalArgumentException("Fix table schema: " + e.getMessage(), e);
} Prevention
- Check the CDC connector's supported-type list before designing the schema
- Avoid MAP and other complex types in CDC table definitions
- Keep catalog type mappings in sync with the connector version
When it happens
Trigger: A CDC source whose SeaTunnel schema contains a MAP column (or another type not handled) reaching converter creation, since CDC row values cannot be mapped into that type.
Common situations: Defining a table schema for a CDC source that includes MAP or unsupported complex types, e.g. hand-written schema or catalog mapping gap.
Related errors
- Unsupported SQL type:
- Unsupported BYTES value type:
- Vitess CDC bootstrap schema does not support catalog SQL typ
- UNSUPPORTED_DATA_TYPE
- UNSUPPORTED_DATA_TYPE
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/c720e711ca27a4fb.
Report an issue: GitHub.