{"record":{"id":"03d62d16dbef3640","repo":"apache/seatunnel","slug":"unsupported-data-type-03d62d","errorCode":"UNSUPPORTED_DATA_TYPE","errorMessage":"Hbase connector does not support this column type [%s]","messagePattern":"Hbase connector does not support this column type \\[(.+?)\\]","errorType":"error_code","errorClass":"HbaseConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/sink/HbaseSinkWriter.java","lineNumber":272,"sourceCode":"            case TIMESTAMP:\n                LocalDateTime timestamp =\n                        field instanceof LocalDateTime\n                                ? (LocalDateTime) field\n                                : DateTimeUtils.parse(field.toString());\n                return DateTimeUtils.toString(\n                                timestamp, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS)\n                        .getBytes(charset);\n            case ARRAY:\n                String arrayAsString = field.toString().replaceAll(\"\\\\[|\\\\]|\\\\s\", \"\");\n                return arrayAsString.getBytes(charset);\n            case STRING:\n                return field.toString().getBytes(charset);\n            default:\n                String errorMsg =\n                        String.format(\n                                \"Hbase connector does not support this column type [%s]\",\n                                fieldType.getSqlType());\n                throw new HbaseConnectorException(\n                        CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE, errorMsg);\n        }\n    }\n}\n","sourceCodeStart":254,"sourceCodeEnd":277,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/sink/HbaseSinkWriter.java#L254-L277","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\ntransform { Sql { source_table_name = \"src\" result_table_name = \"t\" query = \"select * from src\" } }\n// after\ntransform { Sql { source_table_name = \"src\" result_table_name = \"t\" query = \"select CAST(obj_col AS string) AS obj_col, ... from src\" } }","handlingStrategy":"validation","validationCode":"for (int i = 0; i < rowType.getTotalFields(); i++) {\n    SqlType t = rowType.getFieldType(i).getSqlType();\n    if (t == SqlType.MAP || t == SqlType.ARRAY || t == SqlType.ROW) {\n        throw new IllegalArgumentException(\"Field \" + rowType.getFieldName(i) + \" type not supported by HBase sink\");\n    }\n}","typeGuard":"static boolean isSinkWritable(SeaTunnelDataType<?> type) {\n    return type instanceof BasicType || type instanceof LocalTimeType || type instanceof DecimalType || type instanceof PrimitiveByteArrayType;\n}","tryCatchPattern":"try { writer.write(row); }\ncatch (HbaseConnectorException e) {\n    if (e.getSeaTunnelErrorCode() == CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE) {\n        // route row to a dead-letter queue / skip with log\n    } else throw e;\n}","preventionTips":["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"],"tags":["hbase","sink","serialization","unsupported-type"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}