{"record":{"id":"89dda3735882ea44","repo":"prestodb/presto","slug":"unknown-type","errorCode":null,"errorMessage":"Unknown type ","messagePattern":"Unknown type ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-parquet/src/main/java/com/facebook/presto/parquet/cache/MetadataReader.java","lineNumber":495,"sourceCode":"        switch (type) {\n            case BYTE_ARRAY:\n                return PrimitiveTypeName.BINARY;\n            case INT64:\n                return PrimitiveTypeName.INT64;\n            case INT32:\n                return PrimitiveTypeName.INT32;\n            case BOOLEAN:\n                return PrimitiveTypeName.BOOLEAN;\n            case FLOAT:\n                return PrimitiveTypeName.FLOAT;\n            case DOUBLE:\n                return PrimitiveTypeName.DOUBLE;\n            case INT96:\n                return PrimitiveTypeName.INT96;\n            case FIXED_LEN_BYTE_ARRAY:\n                return PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY;\n            default:\n                throw new IllegalArgumentException(\"Unknown type \" + type);\n        }\n    }\n\n    private static OriginalType getOriginalType(ConvertedType type)\n    {\n        switch (type) {\n            case UTF8:\n                return OriginalType.UTF8;\n            case MAP:\n                return OriginalType.MAP;\n            case MAP_KEY_VALUE:\n                return OriginalType.MAP_KEY_VALUE;\n            case LIST:\n                return OriginalType.LIST;\n            case ENUM:\n                return OriginalType.ENUM;\n            case DECIMAL:\n                return OriginalType.DECIMAL;","sourceCodeStart":477,"sourceCodeEnd":513,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-parquet/src/main/java/com/facebook/presto/parquet/cache/MetadataReader.java#L477-L513","documentation":"getTypeName maps thrift ParquetType enum values to parquet-mr PrimitiveTypeName values; an unmapped enum value falls through to the default case and throws IllegalArgumentException. This means the file's schema declares a physical type this reader doesn't recognize — usually a newer Parquet type written by a newer library version.","triggerScenarios":"readParquetSchema → primitiveBuilder calls getTypeName with a ConvertedType/ParquetType enum constant not present in the switch (e.g. a type added in a newer parquet-format spec than the reader supports).","commonSituations":"Reading files written by newer Parquet/Impala/Spark writers with types unknown to an older Presto; corrupted thrift schema bytes producing invalid enum values; schema manually edited.","solutions":["Upgrade Presto/presto-parquet to a version supporting the newer parquet-format types","Re-write the file with only widely-supported physical types (e.g. convert exotic types to primitives)","Inspect the file's schema with parquet-tools to identify the offending column type","If corruption is suspected, validate the file and re-generate it"],"exampleFix":"// before: default: throw new IllegalArgumentException(\"Unknown type \" + type);\n// after\ndefault:\n    LOG.warn(\"Unknown parquet type %s, falling back to BINARY\", type);\n    return PrimitiveTypeName.BINARY;","handlingStrategy":"validation","validationCode":"// probe schema before full read\nSet<PrimitiveTypeName> used = readSchema(dataSource).stream()\n    .map(TypeName::of)\n    .collect(toSet());\nSet<PrimitiveTypeName> supported = EnumSet.allOf(PrimitiveTypeName.class); // match reader version\nif (!supported.containsAll(used)) {\n    throw new UnsupportedSchemaException(used);\n}","typeGuard":"// narrow unknown types before use\nboolean isSupportedType(ParquetType t) {\n    return Arrays.stream(PrimitiveTypeName.values())\n        .anyMatch(p -> p.name().equals(t.name()));\n}","tryCatchPattern":"try {\n    readParquetMetadata(dataSource);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unknown type \")) {\n        // unsupported physical type: request library upgrade / rewrite file\n        throw new UnsupportedParquetTypeException(e.getMessage(), e);\n    } else throw e;\n}","preventionTips":["Pin writer and reader to compatible parquet-format versions","Avoid exotic physical types when files must be read by multiple engines","Test cross-engine readability of new pipelines before rollout"],"tags":["parquet","schema","type-mapping","version-compatibility"],"backgroundTag":"unknown-parquet-physical-type","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}