apache/seatunnel · error · HbaseConnectorException
UNSUPPORTED_DATA_TYPE
UNSUPPORTED_DATA_TYPE
Error message
Hbase connector does not support this column type [%s]
What it means
When writing to HBase, HbaseSinkWriter.convertColumnToBytes converts each SeaTunnel column to bytes for the configured field mapping; column types without a branch in the switch hit the default and throw HbaseConnectorException UNSUPPORTED_DATA_TYPE with 'Hbase connector does not support this column type [%s]'. The sink can only serialize the primitive types it implements.
Source
Thrown at seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/sink/HbaseSinkWriter.java:272
case TIMESTAMP:
LocalDateTime timestamp =
field instanceof LocalDateTime
? (LocalDateTime) field
: DateTimeUtils.parse(field.toString());
return DateTimeUtils.toString(
timestamp, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS)
.getBytes(charset);
case ARRAY:
String arrayAsString = field.toString().replaceAll("\\[|\\]|\\s", "");
return arrayAsString.getBytes(charset);
case STRING:
return field.toString().getBytes(charset);
default:
String errorMsg =
String.format(
"Hbase connector does not support this column type [%s]",
fieldType.getSqlType());
throw new HbaseConnectorException(
CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE, errorMsg);
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Remove or remap complex-typed columns before the HBase sink (use a SQL transform to cast/flatten to primitives)
- Cast the column to a supported type (string, int, long, double, boolean, decimal, date, timestamp, bytes)
- Verify each entry in the sink's field mapping matches a supported column type
Example fix
// before
transform { Sql { source_table_name = "src" result_table_name = "t" query = "select * from src" } }
// after
transform { Sql { source_table_name = "src" result_table_name = "t" query = "select CAST(obj_col AS string) AS obj_col, ... from src" } } Defensive patterns
Strategy: validation
Validate before calling
for (int i = 0; i < rowType.getTotalFields(); i++) {
SqlType t = rowType.getFieldType(i).getSqlType();
if (t == SqlType.MAP || t == SqlType.ARRAY || t == SqlType.ROW) {
throw new IllegalArgumentException("Field " + rowType.getFieldName(i) + " type not supported by HBase sink");
}
} Type guard
static boolean isSinkWritable(SeaTunnelDataType<?> type) {
return type instanceof BasicType || type instanceof LocalTimeType || type instanceof DecimalType || type instanceof PrimitiveByteArrayType;
} Try / catch
try { writer.write(row); }
catch (HbaseConnectorException e) {
if (e.getSeaTunnelErrorCode() == CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE) {
// route row to a dead-letter queue / skip with log
} else throw e;
} Prevention
- Flatten/cast complex columns before the HBase sink (SQL transform CAST)
- Review field mapping against the actual upstream schema
- Add a pipeline type check between source and HBase sink
When it happens
Trigger: A sink column mapping references a SeaTunnel field whose SqlType has no conversion branch (e.g. MAP, ARRAY, ROW) when the writer builds row bytes via convertColumnToBytes.
Common situations: Source produced complex types (e.g. from a JSON source) piped directly into HBase sink; schema changed to add a complex field; typo in field mapping selecting the wrong column.
Related errors
- Unsupported type in LocalTimeArrayType: ${eleSqlType}
- Unsupported type: ${sqlType}
- Unsupported type: ${clazz}
- array inject error, unsupported data type: " + type
- UNSUPPORTED_TYPE
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/03d62d16dbef3640.
Report an issue: GitHub.