{"record":{"id":"f2a196dffb35d542","repo":"apache/iceberg","slug":"unsupported-to-derive-schema-for-type-logicaltyp","errorCode":null,"errorMessage":"Unsupported to derive Schema for type: <logicalType>","messagePattern":"Unsupported to derive Schema for type: <logicalType>","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/formats/avro/typeutils/AvroSchemaConverter.java","lineNumber":593,"sourceCode":"        Schema record = builder.endRecord();\n        return nullable ? nullableSchema(record) : record;\n      case MULTISET:\n      case MAP:\n        Schema map =\n            SchemaBuilder.builder()\n                .map()\n                .values(convertToSchema(extractValueTypeToAvroMap(logicalType), rowName));\n        return nullable ? nullableSchema(map) : map;\n      case ARRAY:\n        ArrayType arrayType = (ArrayType) logicalType;\n        Schema array =\n            SchemaBuilder.builder()\n                .array()\n                .items(convertToSchema(arrayType.getElementType(), rowName));\n        return nullable ? nullableSchema(array) : array;\n      case RAW:\n      default:\n        throw new UnsupportedOperationException(\n            \"Unsupported to derive Schema for type: \" + logicalType);\n    }\n  }\n\n  public static LogicalType extractValueTypeToAvroMap(LogicalType type) {\n    LogicalType keyType;\n    LogicalType valueType;\n    if (type instanceof MapType) {\n      MapType mapType = (MapType) type;\n      keyType = mapType.getKeyType();\n      valueType = mapType.getValueType();\n    } else {\n      MultisetType multisetType = (MultisetType) type;\n      keyType = multisetType.getElementType();\n      valueType = new IntType();\n    }\n    if (!keyType.is(LogicalTypeFamily.CHARACTER_STRING)) {\n      throw new UnsupportedOperationException(","sourceCodeStart":575,"sourceCodeEnd":611,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/formats/avro/typeutils/AvroSchemaConverter.java#L575-L611","documentation":"convertToSchema only implements Avro schema derivation for a known set of Flink logical types. RAW (and any unmatched type) has no Avro representation rule, so the converter throws UnsupportedOperationException instead of guessing a schema.","triggerScenarios":"Calling convertToSchema on a LogicalType whose case is RAW or any type not handled by the switch (e.g. a RawType from a custom serializer, or newly added Flink types this converter does not know).","commonSituations":"DataStreams containing RAW-typed columns (e.g. from DataStream API with custom TypeInformations), or Flink version upgrades introducing new logical types while using an older Iceberg AvroSchemaConverter.","solutions":["Remove or replace RAW-typed columns before conversion (e.g. deserialize to a supported type with a Map/projection).","If the RAW payload is actually a known structure, declare the field with its concrete LogicalType instead of RAW.","Check that you are using a Flink/Iceberg version combination where the converter supports your type; upgrade iceberg-flink-runtime if a newer release added support."],"exampleFix":"// before\nSchema s = AvroSchemaConverter.convertToSchema(new RawType<>(MyPojo.class));\n\n// after: use a concrete supported type\nSchema s = AvroSchemaConverter.convertToSchema(new RowType(...));","handlingStrategy":"type-guard","validationCode":"// reject unsupported types up-front\nSet<LogicalTypeRoot> supported = Set.of(ROW, ARRAY, MAP, MULTISET, CHAR, VARCHAR, BOOLEAN, INTEGER, BIGINT, DECIMAL, FLOAT, DOUBLE, DATE, TIME_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE, BINARY, VARBINARY);\nif (!supported.contains(type.getTypeRoot())) {\n    throw new IllegalArgumentException(\"Type not Avro-convertible: \" + type.asSummaryString());\n}","typeGuard":"boolean isAvroConvertible(LogicalType t) {\n    return t.getTypeRoot() != LogicalTypeRoot.RAW;\n}","tryCatchPattern":"try {\n    schema = AvroSchemaConverter.convertToSchema(logicalType);\n} catch (UnsupportedOperationException e) {\n    // fall back to a generic/bytes schema or drop the field\n    schema = fallbackSchema(logicalType);\n}","preventionTips":["Avoid RAW-typed fields in streams destined for Avro sinks","Map custom POJOs to concrete Row types before serialization","Pin compatible Flink/Iceberg versions and check the converter's supported types when upgrading"],"tags":["avro","flink","schema-conversion","unsupported-type"],"backgroundTag":"unsupported-operation","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}