{"record":{"id":"67dc0279c8639f82","repo":"apache/flink","slug":"unsupported-type-s","errorCode":null,"errorMessage":"Unsupported type: %s","messagePattern":"Unsupported type: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvToRowDataConverters.java","lineNumber":184,"sourceCode":"            case DOUBLE:\n                return this::convertToDouble;\n            case CHAR:\n            case VARCHAR:\n                return this::convertToString;\n            case BINARY:\n            case VARBINARY:\n                return this::convertToBytes;\n            case DECIMAL:\n                return createDecimalConverter((DecimalType) type);\n            case ARRAY:\n                return createArrayConverter((ArrayType) type);\n            case ROW:\n                return createRowConverter((RowType) type, false);\n            case MAP:\n            case MULTISET:\n            case RAW:\n            default:\n                throw new UnsupportedOperationException(\"Unsupported type: \" + type);\n        }\n    }\n\n    private boolean convertToBoolean(JsonNode jsonNode) {\n        if (jsonNode.isBoolean()) {\n            // avoid redundant toString and parseBoolean, for better performance\n            return jsonNode.asBoolean();\n        } else {\n            return Boolean.parseBoolean(jsonNode.asText().trim());\n        }\n    }\n\n    private int convertToInt(JsonNode jsonNode) {\n        if (jsonNode.canConvertToInt()) {\n            // avoid redundant toString and parseInt, for better performance\n            return jsonNode.asInt();\n        } else {\n            return Integer.parseInt(jsonNode.asText().trim());","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvToRowDataConverters.java#L166-L202","documentation":"Thrown by CsvToRowDataConverters.createConverter when a column's LogicalTypeRoot is MAP, MULTISET, or RAW: the CSV deserializer has converters for primitives, arrays, and rows but none for map-like or raw types, so it raises UnsupportedOperationException at converter-construction time (table/plan validation of the csv format source).","triggerScenarios":"CREATE TABLE ... WITH ('format'='csv') whose schema contains MAP<..,..>, MULTISET<..>, or a RAW-typed column; the converter lookup happens while the deserialization schema is built, before any row is read.","commonSituations":"Copying a JSON-format table definition over to csv; computed column of a UDF returning RAW; internal collector schemas reusing the same DDL across formats.","solutions":["Remove the MAP/MULTISET/RAW column from the CSV table, or declare it as STRING and parse downstream.","Switch the format to 'json' which supports MAP/MULTISET.","Ensure UDF-derived columns are cast to supported SQL types before hitting the csv source contract."],"exampleFix":"-- before\nCREATE TABLE t (id INT, props MAP<STRING,STRING>) WITH ('format'='csv', ...);\n\n-- after\nCREATE TABLE t (id INT, props STRING) WITH ('format'='csv', ...);","handlingStrategy":"type-guard","validationCode":"// Before creating the table/deserializer:\nstatic boolean csvDeserializable(LogicalType t) {\n    LogicalTypeRoot r = t.getTypeRoot();\n    return r != LogicalTypeRoot.MAP && r != LogicalTypeRoot.MULTISET && r != LogicalTypeRoot.RAW;\n}\n// fail fast in a unit test over the table schema","typeGuard":"static boolean isCsvReadableColumn(LogicalType t) {\n    switch (t.getTypeRoot()) {\n        case MAP: case MULTISET: case RAW: return false;\n        default: return true;\n    }\n}","tryCatchPattern":null,"preventionTips":["Never put MAP/MULTISET/RAW in csv-format DDLs","Ingest such columns as STRING and decode downstream","Use json format when structured fields are required"],"tags":["csv","unsupported-type","map","deserialization"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}