{"record":{"id":"d7c394d92758efba","repo":"apache/seatunnel","slug":"seatunnel-avro-format-is-not-supported-for-this-da","errorCode":null,"errorMessage":"SeaTunnel avro format is not supported for this data type [%s]","messagePattern":"SeaTunnel avro format is not supported for this data type \\[(.+?)\\]","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-formats/seatunnel-format-protobuf/src/main/java/org/apache/seatunnel/format/protobuf/ProtobufToRowConverter.java","lineNumber":162,"sourceCode":"                return res;\n            case ROW:\n                Descriptors.Descriptor nestedTypeByName =\n                        descriptor.findNestedTypeByName(fieldName);\n                DynamicMessage s =\n                        (DynamicMessage)\n                                dynamicMessage.getField(\n                                        descriptor.findFieldByName(fieldName.toLowerCase()));\n                return converter(nestedTypeByName, s, (SeaTunnelRowType) dataType);\n            case ARRAY:\n                SeaTunnelDataType<?> basicType = ((ArrayType<?, ?>) dataType).getElementType();\n                List<Object> list = (List<Object>) val;\n                return convertArray(list, basicType);\n            default:\n                String errorMsg =\n                        String.format(\n                                \"SeaTunnel avro format is not supported for this data type [%s]\",\n                                dataType.getSqlType());\n                throw new RuntimeException(errorMsg);\n        }\n    }\n\n    private Object getFieldValue(DynamicMessage dm, String fieldName) {\n        return dm.getAllFields().entrySet().stream()\n                .filter(entry -> entry.getKey().getName().equals(fieldName))\n                .map(Map.Entry::getValue)\n                .findFirst()\n                .orElse(null);\n    }\n\n    protected Object convertArray(List<Object> val, SeaTunnelDataType<?> dataType) {\n        if (val == null) {\n            return null;\n        }\n        int length = val.size();\n        Object instance = Array.newInstance(dataType.getTypeClass(), length);\n        for (int i = 0; i < val.size(); i++) {","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-formats/seatunnel-format-protobuf/src/main/java/org/apache/seatunnel/format/protobuf/ProtobufToRowConverter.java#L144-L180","documentation":"Thrown by ProtobufToRowConverter.convertField as a plain RuntimeException when a protobuf DynamicMessage field maps to a SeaTunnel data type the conversion path cannot handle. Only explicitly handled SQL types (primitives, STRING, BYTES, arrays, maps, rows, temporals) are converted; anything else falls to the default branch. Note the message text says 'avro' even though this is the protobuf converter — a copy-paste quirk in the source.","triggerScenarios":"convertField encountering a SeaTunnel SqlType outside the handled set (e.g. NULL or unrecognized/extension types) while converting protobuf DynamicMessage data to a SeaTunnelRow; recursion via converter/convertArray reaching an unhandled nested type.","commonSituations":"Schema/catalog declaring a column type the protobuf converter does not implement; proto schema evolution introducing field kinds not anticipated; misconfigured catalog table mapping proto fields to exotic SeaTunnel types.","solutions":["Check the catalog/schema mapping for the offending field and change it to a supported type (primitives, STRING, BYTES, ARRAY, MAP, ROW, temporal types)","Regenerate/adjust the proto schema so the field maps to a supported protobuf/SeaTunnel type","Upgrade SeaTunnel — newer releases often extend the supported type set; file an issue if a needed type is missing"],"exampleFix":"// before (catalog table)\nfield_price = FLOAT_128   // unsupported high-precision type\n\n// after\nfield_price = DOUBLE      // or another supported numeric type","handlingStrategy":"validation","validationCode":"Set<SqlType> supported = Set.of(SqlType.STRING, SqlType.BOOLEAN, SqlType.INT, SqlType.BIGINT,\n    SqlType.FLOAT, SqlType.DOUBLE, SqlType.DATE, SqlType.TIME, SqlType.TIMESTAMP,\n    SqlType.BYTES, SqlType.ARRAY, SqlType.MAP, SqlType.ROW);\nif (!supported.contains(dataType.getSqlType())) {\n    throw new IllegalArgumentException(\"Unsupported proto->row type: \" + dataType.getSqlType());\n}","typeGuard":"boolean isProtoConvertible(SeaTunnelDataType<?> t) {\n    switch (t.getSqlType()) {\n        case STRING: case BOOLEAN: case INT: case BIGINT: case FLOAT: case DOUBLE:\n        case BYTES: case DATE: case TIME: case TIMESTAMP:\n        case ARRAY: case MAP: case ROW:\n            return true;\n        default:\n            return false;\n    }\n}","tryCatchPattern":"try {\n    SeaTunnelRow row = converter.convert(dynamicMessage);\n} catch (RuntimeException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"not supported for this data type\")) {\n        throw new IllegalStateException(\"Fix schema mapping; unsupported type\", e);\n    }\n    throw e;\n}","preventionTips":["Map catalog columns only to types the protobuf converter implements","Diff your declared schema against the proto descriptor before running the job","Test the full read path with representative proto messages in CI","Upgrade SeaTunnel if a newer version supports your type"],"tags":["protobuf","data-type","type-conversion"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}