{"record":{"id":"c67cdc5dd204698a","repo":"apache/iceberg","slug":"unknown-logical-type-logicaltype-getname-c67cdc","errorCode":null,"errorMessage":"Unknown logical type: \" + logicalType.getName()","messagePattern":"Unknown logical type: \" \\+ logicalType\\.getName\\(\\)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/FlinkPlannedAvroReader.java","lineNumber":166,"sourceCode":"\n          case \"timestamp-micros\":\n            return FlinkValueReaders.timestampMicros();\n\n          case \"timestamp-nanos\":\n            return FlinkValueReaders.timestampNanos();\n\n          case \"decimal\":\n            LogicalTypes.Decimal decimal = (LogicalTypes.Decimal) logicalType;\n            return FlinkValueReaders.decimal(\n                ValueReaders.decimalBytesReader(primitive),\n                decimal.getPrecision(),\n                decimal.getScale());\n\n          case \"uuid\":\n            return FlinkValueReaders.uuids();\n\n          default:\n            throw new IllegalArgumentException(\"Unknown logical type: \" + logicalType.getName());\n        }\n      }\n\n      switch (primitive.getType()) {\n        case NULL:\n          return ValueReaders.nulls();\n        case BOOLEAN:\n          return ValueReaders.booleans();\n        case INT:\n          if (partner != null && partner.typeId() == Type.TypeID.LONG) {\n            return ValueReaders.intsAsLongs();\n          }\n          return ValueReaders.ints();\n        case LONG:\n          return ValueReaders.longs();\n        case FLOAT:\n          if (partner != null && partner.typeId() == Type.TypeID.DOUBLE) {\n            return ValueReaders.floatsAsDoubles();","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/data/FlinkPlannedAvroReader.java#L148-L184","documentation":"FlinkPlannedAvroReader's primitive builder maps Avro logical types (date, time-millis, timestamp-millis, decimal, uuid, ...) to Flink value readers; an unrecognized logical type name hits the default branch and throws IllegalArgumentException 'Unknown logical type: <name>'. Only logical types the reader explicitly knows are supported in this planned-read path.","triggerScenarios":"Reading Avro data whose field has a logical type name not in the handled list (custom logicalType strings or logical types added after this Iceberg version), via FlinkPlannedAvroReader.primitive.","commonSituations":"Avro files written by external tools with custom or newer logical types, schema registry entries using vendor-specific logicalType values, or Avro format version changes.","solutions":["Remove or change the unsupported logicalType in the Avro schema to a standard one (date, timestamp-millis, decimal, uuid)","Read the column as its underlying primitive and convert in application code","Upgrade Iceberg to a version that recognizes the logical type"],"exampleFix":"// before\n{\"type\":\"long\",\"logicalType\":\"custom-duration\"}\n// after\n{\"type\":\"long\"} // read as long, convert in code","handlingStrategy":"try-catch","validationCode":"// Pre-validate the Avro schema's logical types\nfor (Schema.Field f : avroSchema.getFields()) {\n  Schema s = f.schema();\n  String lt = s.getLogicalType() != null ? s.getLogicalType().getName() : null;\n  Preconditions.checkArgument(lt == null || KNOWN_LOGICAL_TYPES.contains(lt),\n      \"Unknown logical type: \" + lt);\n}","typeGuard":null,"tryCatchPattern":"try {\n  reader = readerBuilder.primitive(primitive, logicalType);\n} catch (IllegalArgumentException e) {\n  throw new AvroReadException(\"Cannot decode logical type: \" + e.getMessage(), e);\n}","preventionTips":["Use only standard Avro logicalTypes in schemas","Audit schema-registry schemas for vendor extensions","Upgrade Iceberg when newer Avro logical types are standardized"],"tags":["flink","avro","logical-type"],"backgroundTag":"invalid-enum-value","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"}