apache/seatunnel · error · UnsupportedOperationException
Unsupported type: %s
Error message
Unsupported type: %s
What it means
DebeziumRowConverter.convert (called from getValue/parse) switches over the SeaTunnel SqlType of the target row field; any type not handled by the converter's cases reaches the default branch and throws UnsupportedOperationException 'Unsupported type'. This signals the JSON Debezium format does not implement conversion for that SeaTunnel data type.
Source
Thrown at seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/debezium/DebeziumRowConverter.java:224
getValue(null, ((MapType) dataType).getValueType(), entry.getValue()));
}
return mapValue;
case ROW:
SeaTunnelRowType rowType = (SeaTunnelRowType) dataType;
SeaTunnelRow row = new SeaTunnelRow(rowType.getTotalFields());
for (int i = 0; i < rowType.getTotalFields(); i++) {
row.setField(
i,
getValue(
rowType.getFieldName(i),
rowType.getFieldType(i),
value.has(rowType.getFieldName(i))
? value.get(rowType.getFieldName(i))
: null));
}
return row;
default:
throw new UnsupportedOperationException("Unsupported type: " + sqlType);
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Change the offending column to a supported primitive type (STRING/INT/...) in the table schema
- Drop or exclude the unsupported column from the CDC schema
- Use a different format/connector that supports the type, or add a custom converter extending DebeziumRowConverter
- Check SeaTunnel version — newer releases may have added support; upgrade
Example fix
// before: schema declares ARRAY<STRING> column tags // SeaTunnelRowType with ARRAY field fed to DebeziumJsonDeserializationSchema // after: cast/simplify to STRING in source query or transform // SELECT CAST(tags AS STRING) AS tags FROM ...
Defensive patterns
Strategy: validation
Validate before calling
// ensure every field type is converter-supported before use
for (SeaTunnelType<?> t : rowType.getFieldTypes()) {
switch (t.getSqlType()) {
case STRING: case INT: case BIGINT: case BOOLEAN:
case DOUBLE: case DECIMAL: case DATE: case TIME: case TIMESTAMP:
break;
default:
throw new IllegalArgumentException("Type not supported by Debezium JSON format: " + t);
}
} Try / catch
try {
return converter.convert(value);
} catch (UnsupportedOperationException e) {
throw new IllegalStateException("Schema contains type unsupported by debezium-json format: " + e.getMessage(), e);
} Prevention
- Avoid ARRAY/MAP/ROW columns with format=debezium-json unless your version supports them
- Simplify CDC schemas to primitives or cast complex columns to STRING upstream
- Check release notes for newly supported types before schema changes
When it happens
Trigger: A SeaTunnel table schema for the Debezium JSON source declares a field type (e.g. ARRAY, MAP, ROW, or another type absent from the switch) that DebeziumRowConverter's convert method has no case for; the row is converted column by column via value(...) and hits the default branch.
Common situations: Users adding complex columns (arrays/maps/nested rows) to a CDC table read with format=debezium-json; schema evolution after upgrading SeaTunnel where a new column type is unsupported; typos in connector config producing unexpected SqlType mapping.
Related errors
- COMMON-02
- COMMON-02
- Unable to instantiate the database history class " + config.
- Unsupported operation type, the MIN value type %s is differe
- Data change record shouldn't use READ operation, the the rec
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/99e4a8393c4c83d5.
Report an issue: GitHub.