apache/seatunnel · error · HbaseConnectorException
UNSUPPORTED_DATA_TYPE
UNSUPPORTED_DATA_TYPE
Error message
Unsupported data type {} What it means
During HBase deserialization, a SeaTunnel column whose SqlType has no case in HBaseDeserializationFormat.deserializeValue hits the default branch and throws HbaseConnectorException with UNSUPPORTED_DATA_TYPE and message 'Unsupported data type {sqlType}'. The format layer only maps a fixed set of HBase cell bytes to SeaTunnel types; anything else cannot be converted.
Source
Thrown at seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/format/HBaseDeserializationFormat.java:96
}
case DOUBLE:
return Bytes.toDouble(cell);
case BYTES:
return cell;
case DATE:
return LocalDate.parse(
Bytes.toString(cell), DateTimeFormatter.ofPattern(dateFormat.getValue()));
case TIME:
return LocalTime.parse(
Bytes.toString(cell), DateTimeFormatter.ofPattern(timeFormat.getValue()));
case TIMESTAMP:
return LocalDateTime.parse(
Bytes.toString(cell),
DateTimeFormatter.ofPattern(datetimeFormat.getValue()));
case STRING:
return Bytes.toString(cell);
default:
throw new HbaseConnectorException(
CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
"Unsupported data type " + typeInfo.getSqlType());
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Restrict the schema to types supported by the chosen HBase deserialization format (string, int, long, double, float, boolean, decimal, date, time, timestamp, bytes)
- Use the 'bytes'/STRING mapping for the column and convert downstream in a transform
- Check which deserialization format is configured and its supported type list
Example fix
// before
schema = { fields { cf:sq = MAP<STRING,STRING> } }
// after
schema = { fields { cf:sq = string } } Defensive patterns
Strategy: validation
Validate before calling
Set<SqlType> supported = Set.of(STRING, INT, BIGINT, DOUBLE, FLOAT, BOOLEAN, DECIMAL, DATE, TIME, TIMESTAMP, BYTES);
for (SeaTunnelRowType.Field f : rowType.getFields()) {
if (!supported.contains(((PrimitiveByteArrayType) ...).getSqlType())) { /* fail fast or cast */ }
} Type guard
static boolean isSupportedHbaseType(CatalogTableColumn c) {
return c.getColumnType() instanceof BasicType || c.getColumnType() instanceof LocalTimeType || c.getColumnType() instanceof DecimalType || c.getColumnType() instanceof PrimitiveByteArrayType;
} Try / catch
try { row = format.deserialize(rowBytes); }
catch (HbaseConnectorException e) {
if (e.getSeaTunnelErrorCode() == CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE) {
// fall back to bytes / cast column
} else throw e;
} Prevention
- Keep the HBase schema limited to supported primitive types
- Cast complex columns to string before HBase read
- Pin the schema to avoid upstream drift introducing new types
When it happens
Trigger: A catalog/table schema containing a column type not handled by the switch in deserializeValue (e.g. MAP, ARRAY, or other complex types) is deserialized from HBase cells via deserialize -> deserializeValue.
Common situations: Declaring an HBase column family:qualifier as a complex type in the schema; schema drift after upstream table change; copying a schema from another connector that supports more types.
Related errors
- UNSUPPORTED_DATA_TYPE
- Unsupported type:
- Unsupported BYTES value type:
- UNSUPPORTED_DATA_TYPE
- UNSUPPORTED_DATA_TYPE
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4bee8caafff3fa65.
Report an issue: GitHub.