apache/seatunnel · error · SeaTunnelRuntimeException
COMMON-17
COMMON-17
Error message
'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type. What it means
Lance connector's LanceTypeMapper.convertDataType() throws this when a Lance/Arrow physical type string has no mapping to a SeaTunnel data type. Struct, list and map Lance types are explicitly unimplemented (TODO), and any other unrecognized type string also lands in the default throw.
Solutions
- Remove or project out nested (struct/list/map) columns from the Lance dataset before reading
- Cast nested columns to supported primitive types
- Await/patch mapper support: add a case for the type in LanceTypeMapper.convertDataType()
Example fix
// before dataset.to_table(columns=["nested_col", "id"]) // after: select only supported columns dataset.to_table(columns=["id", "name"])
Defensive patterns
Strategy: try-catch
Try / catch
try {
SeaTunnelDataType<?> t = mapper.convertDataType(field, lanceType);
} catch (SeaTunnelConvertException e) {
LOG.warn("Skipping unsupported Lance type {}", lanceType.getType());
// fallback: filter the column out of the read schema
} Prevention
- Filter unsupported columns from the dataset schema before mapping
When it happens
Trigger: Reading a Lance table whose column type string (type.getType()) is not one of the mapped primitives — e.g. 'struct', 'list', 'map', or an unexpected type string.
Common situations: Reading Lance datasets containing nested/complex columns (struct/list/map) which are not yet supported by the mapper; corrupted or unusual type metadata.
Related errors
- Failed to close allocator
- List as map key is not supported
- List as map value not yet implemented
- List field must have a child field
- List type requires List value, got
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/6ee80e7d75eaa525.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-lance/src/main/java/org/apache/seatunnel/connectors/seatunnel/lance/data/LanceTypeMapper.java:85
case "float64":
return BasicType.DOUBLE_TYPE;
case "date":
case "date32":
case "date64":
return LocalTimeType.LOCAL_DATE_TYPE;
case "time":
case "time32":
case "time64":
return LocalTimeType.LOCAL_TIME_TYPE;
case "timestamp":
return LocalTimeType.LOCAL_DATE_TIME_TYPE;
case "binary":
return BasicType.BYTE_TYPE;
case "decimal128":
return new DecimalType(38, 10);
// TODO: struct|list|map
default:
throw CommonError.convertToSeaTunnelTypeError("Lance", type.getType(), field);
}
}
public JsonArrowDataType convertJsonArrowType(
String field, @NonNull SeaTunnelDataType<?> type) {
switch (type.getSqlType()) {
case TINYINT:
case SMALLINT:
case BIGINT:
case INT:
JsonArrowDataType intType = new JsonArrowDataType();
intType.setType("int32");
return intType;
case STRING:
JsonArrowDataType stringType = new JsonArrowDataType();
stringType.setType("utf8");
return stringType;
case MAP:View on GitHub (pinned to cf67b549a7)