apache/seatunnel · error · SeaTunnelRuntimeException
COMMON-17
COMMON-17
Error message
'<identifier>' unsupported convert type '<dataType>' of '<field>' to SeaTunnel data type.
What it means
DefaultSeaTunnelRowDeserializer converts DynamoDB AttributeValues into Java values according to the declared SeaTunnel column type. This error is thrown in convert's default branch when the field's SeaTunnel SQL type is one the deserializer does not handle (e.g. ROW/struct or other types outside BOOLEAN/INT/STRING/BYTES/MAP/ARRAY/etc.), so the DynamoDB connector cannot map the value.
Source
Thrown at seatunnel-connectors-v2/connector-amazondynamodb/src/main/java/org/apache/seatunnel/connectors/seatunnel/amazondynamodb/serialize/DefaultSeaTunnelRowDeserializer.java:151
} else if (attributeValue.hasSs()) {
List<String> datas = attributeValue.ss();
for (int index = 0; index < datas.size(); index++) {
Array.set(array, index, AttributeValue.fromS(datas.get(index)));
}
} else if (attributeValue.hasNs()) {
List<String> datas = attributeValue.ns();
for (int index = 0; index < datas.size(); index++) {
Array.set(array, index, AttributeValue.fromS(datas.get(index)));
}
} else if (attributeValue.hasBs()) {
List<SdkBytes> datas = attributeValue.bs();
for (int index = 0; index < datas.size(); index++) {
Array.set(array, index, AttributeValue.fromB(datas.get(index)));
}
}
return array;
default:
throw CommonError.convertToSeaTunnelTypeError(
"AmazonDynamodb", seaTunnelDataType.getSqlType().toString(), field);
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Identify the failing field and its SqlType from the error message, then change the schema to a supported type (TINYINT/SMALLINT/INT/BIGINT/DOUBLE/DECIMAL/BOOLEAN/STRING/TIME/DATE/TIMESTAMP/BYTES/MAP/ARRAY).
- Flatten nested struct (ROW) columns into supported types before reading from DynamoDB.
- Cast complex columns to STRING and parse them downstream if needed.
- If a type should be supported, extend DefaultSeaTunnelRowDeserializer.convert with a case for it and file an upstream issue.
Example fix
// before: unsupported ROW column in schema SeaTunnelRowType row = ... "nested" -> ROW_TYPE // after: declare as string and parse downstream "nested" -> BasicType.STRING_TYPE
Defensive patterns
Strategy: validation
Validate before calling
// Check the SeaTunnel schema types before running the DynamoDB source
for (CatalogColumn col : catalogTable.getTableSchema().getColumns()) {
SqlType t = col.getDataType().getSqlType();
Set<SqlType> supported = Set.of(SqlType.TINYINT, SqlType.SMALLINT, SqlType.INT, SqlType.BIGINT,
SqlType.DOUBLE, SqlType.DECIMAL, SqlType.BOOLEAN, SqlType.STRING, SqlType.TIME,
SqlType.DATE, SqlType.TIMESTAMP, SqlType.BYTES, SqlType.MAP, SqlType.ARRAY);
if (!supported.contains(t)) {
throw new IllegalArgumentException("DynamoDB deserializer does not support column '" + col.getName() + "' of type " + t);
}
} Type guard
boolean isDynamoDbSupportedType(SeaTunnelDataType<?> t) {
return java.util.Set.of(SqlType.TINYINT, SqlType.SMALLINT, SqlType.INT, SqlType.BIGINT,
SqlType.DOUBLE, SqlType.DECIMAL, SqlType.BOOLEAN, SqlType.STRING, SqlType.TIME,
SqlType.DATE, SqlType.TIMESTAMP, SqlType.BYTES, SqlType.MAP, SqlType.ARRAY)
.contains(t.getSqlType());
} Try / catch
try {
reader.read();
} catch (Exception e) {
// message contains 'AmazonDynamodb' and the unsupported SqlType
throw new RuntimeException("Adjust DynamoDB source schema: " + e.getMessage(), e);
} Prevention
- Restrict DynamoDB source schemas to the deserializer's supported SqlTypes.
- Flatten ROW/struct columns to scalars or strings before reading DynamoDB.
- Re-check schemas after SeaTunnel upgrades in case new SqlTypes appear.
- Test deserialization on sample items before full table scans.
When it happens
Trigger: Reading from Amazon DynamoDB with a table schema that declares a column whose SeaTunnel SqlType falls through the switch (e.g. ROW, NULL, or another unmapped type), during convertRow/convert at deserialization time.
Common situations: Schema defined with nested row types or types unsupported by the DynamoDB deserializer; a catalog-to-seaTunnel type mapping producing an unexpected SqlType; version changes adding SqlTypes not covered by the switch.
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
- UNSUPPORTED_DATA_TYPE
- Interrupted during retry
- Failed to write %d items to table %s after %d retries
- DESERIALIZE_FAILED
- Unsupported type:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/bf60c6cc46de581c.
Report an issue: GitHub.