{"record":{"id":"ad158564333ca9f1","repo":"apache/flink","slug":"unsupported-type-ad1585","errorCode":null,"errorMessage":"Unsupported type: {}","messagePattern":"Unsupported type: (.+?)","errorType":"validation","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/AvroToRowDataConverters.java","lineNumber":134,"sourceCode":"            case SMALLINT:\n                return avroObject -> ((Integer) avroObject).shortValue();\n            case BOOLEAN: // boolean\n            case INTEGER: // int\n            case INTERVAL_YEAR_MONTH: // long\n            case BIGINT: // long\n            case INTERVAL_DAY_TIME: // long\n            case FLOAT: // float\n            case DOUBLE: // double\n                return avroObject -> avroObject;\n            case DATE:\n                return AvroToRowDataConverters::convertToDate;\n            case TIME_WITHOUT_TIME_ZONE:\n                return AvroToRowDataConverters::convertToTime;\n            case TIMESTAMP_WITHOUT_TIME_ZONE:\n                return AvroToRowDataConverters::convertToTimestamp;\n            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:\n                if (legacyTimestampMapping) {\n                    throw new UnsupportedOperationException(\"Unsupported type: \" + type);\n                } else {\n                    return AvroToRowDataConverters::convertToTimestamp;\n                }\n            case CHAR:\n            case VARCHAR:\n                return avroObject -> StringData.fromString(avroObject.toString());\n            case BINARY:\n            case VARBINARY:\n                return AvroToRowDataConverters::convertToBytes;\n            case DECIMAL:\n                return createDecimalConverter((DecimalType) type);\n            case ARRAY:\n                return createArrayConverter((ArrayType) type, legacyTimestampMapping);\n            case ROW:\n                return createRowConverter((RowType) type);\n            case MAP:\n            case MULTISET:\n                return createMapConverter(type, legacyTimestampMapping);","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/AvroToRowDataConverters.java#L116-L152","documentation":"AvroToRowDataConverters.createRowDataConverter refuses TIMESTAMP_WITH_LOCAL_TIME_ZONE when legacyTimestampMapping is true: in legacy mode TIMESTAMP_LTZ is mapped to Avro's timestamp-millis logical type without a timezone, and reading it back into a TIMESTAMP_WITH_LOCAL_TIME_ZONE RowData is unsupported, so converter construction fails fast.","triggerScenarios":"Deserializing an Avro schema/RowType containing TIMESTAMP_WITH_LOCAL_TIME_ZONE while 'avro.timestamp.logical-type.mapping.legacy' (or the constructor flag legacyTimestampMapping) is enabled.","commonSituations":"Enabling the legacy mapping option for compatibility with old pipelines on a schema that has local-zoned timestamp columns; Flink version upgrades where the default flipped to false.","solutions":["Disable legacy timestamp mapping (set avro.timestamp.logical-type.mapping.legacy=false / pass legacyTimestampMapping=false) so TIMESTAMP_LTZ maps to Avro local-timestamp types.","Or change the column to TIMESTAMP(6) WITHOUT TIME ZONE if legacy mapping must stay enabled.","Regenerate/adjust the Avro schema so it uses the non-legacy logical types (local-timestamp-millis/micros)."],"exampleFix":"// before\nAvroRowDataDeserializationSchema deserializer =\n    new AvroRowDataDeserializationSchema(rowType, typeInfo, /*legacy*/ true, true, true);\n\n// after\nAvroRowDataDeserializationSchema deserializer =\n    new AvroRowDataDeserializationSchema(rowType, typeInfo, false, true, true);","handlingStrategy":"validation","validationCode":"boolean hasLtz = rowType.getFields().stream()\n        .anyMatch(f -> f.getType().is(LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE));\nif (hasLtz && legacyTimestampMapping) {\n    throw new IllegalArgumentException(\"TIMESTAMP_LTZ unsupported with legacy Avro timestamp mapping\");\n}","typeGuard":"static boolean ltzCompatible(RowType t, boolean legacy) {\n    return !legacy || t.getFields().stream()\n            .noneMatch(f -> f.getType().is(LogicalTypeRoot.TIMESTAMP_WITH_LOCAL_TIME_ZONE));\n}","tryCatchPattern":null,"preventionTips":["Check the legacy mapping flag against the schema's timestamp kinds at job construction.","Prefer non-legacy mapping for any new pipeline with LTZ columns."],"tags":["avro","flink","timestamp","legacy-mapping","configuration"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}