apache/seatunnel · error · KuduConnectorException
UNSUPPORTED_DATA_TYPE
UNSUPPORTED_DATA_TYPE
Error message
Unsupported column type:
What it means
KuduRowSerializer.transform() converts SeaTunnel column values to Kudu column values per SQL type. A SQL type not handled by the switch triggers KuduConnectorException with UNSUPPORTED_DATA_TYPE, reporting the unsupported SqlType. ClassCastExceptions on values are separately wrapped as DATA_TYPE_CAST_FIELD errors.
Source
Thrown at seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/serialize/KuduRowSerializer.java:108
case DECIMAL:
case BYTES:
row.addObject(
seaTunnelRowType.getFieldName(columnIndex),
element.getField(columnIndex));
break;
case TIMESTAMP:
Object fieldValue = element.getField(columnIndex);
if (fieldValue == null) {
row.addObject(seaTunnelRowType.getFieldName(columnIndex), null);
} else {
LocalDateTime localDateTime = (LocalDateTime) fieldValue;
row.addObject(
seaTunnelRowType.getFieldName(columnIndex),
java.sql.Timestamp.valueOf(localDateTime));
}
break;
default:
throw new KuduConnectorException(
CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
"Unsupported column type: " + type.getSqlType());
}
} catch (ClassCastException e) {
throw new KuduConnectorException(
KuduConnectorErrorCode.DATA_TYPE_CAST_FIELD,
"Value type does not match column type "
+ type.getSqlType()
+ " for column "
+ seaTunnelRowType.getFieldName(columnIndex));
}
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Remove or cast unsupported complex columns before the Kudu sink
- Use a transform to convert complex types to supported scalar types
- Verify the Kudu table schema matches only supported SeaTunnel types
- Extend KuduRowSerializer if a mapping is feasible
Defensive patterns
Strategy: type-guard
Validate before calling
// Verify schema compatibility before writing
for (SeaTunnelDataType<?> t : rowType.getFieldTypes()) {
if (!(t.getSqlType() == SqlType.STRING || t.getSqlType() == SqlType.INT ... /* supported set */))
throw new IllegalStateException("Unsupported column type: " + t.getSqlType());
} Type guard
// Java guard
boolean isSupportedSqlType(SqlType sqlType) {
return sqlType == SqlType.STRING || sqlType == SqlType.INT || sqlType == SqlType.BIGINT
|| sqlType == SqlType.TIMESTAMP /* ...only supported scalar types... */;
} Try / catch
try { serializer.serializeRow(row); } catch (KuduConnectorException e) {
if ("UNSUPPORTED_DATA_TYPE".equals(e.getSeaTunnelErrorCode())) { /* flatten/convert column upstream */ }
} catch (KuduConnectorException castEx) { /* DATA_TYPE_CAST_FIELD: fix value types */ } Prevention
- Flatten ARRAY/MAP/ROW columns with a transform before the Kudu sink
- Match sink table schema to supported scalar SeaTunnel types
- Cast values explicitly (e.g. LocalDateTime -> Timestamp) upstream
When it happens
Trigger: Sink writing a SeaTunnelRow whose schema contains a SqlType the serializer does not handle (falling into the default branch), e.g. arrays/maps/rows or other complex types.
Common situations: Source-to-sink pipelines where the upstream produces complex types (ARRAY/MAP/ROW) that Kudu serializer cannot map; schema changes adding new column types upstream.
Related errors
- UNSUPPORTED_DATA_TYPE
- UNSUPPORTED_OPERATION
- CommonErrorCodeDeprecated.ILLEGAL_ARGUMENT
- Unknown MetaLakeTypeMapper type:
- MultiTableWriterRunnable can't find writer for tableId:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/efc1b7d4f017e90e.
Report an issue: GitHub.