{"record":{"id":"d510ee04c3556f9e","repo":"prestodb/presto","slug":"metadata-field-is-missing-for-variant-type","errorCode":null,"errorMessage":"Metadata field is missing for variant type: ","messagePattern":"Metadata field is missing for variant type: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-parquet/src/main/java/org/apache/parquet/io/ColumnIOConverter.java","lineNumber":111,"sourceCode":"                List<Type> types = type.getTypeParameters();\n                if (groupColumnIO.getChildrenCount() != 1) {\n                    return Optional.empty();\n                }\n                Optional<Field> field = constructField(types.get(0), getArrayElementColumn(groupColumnIO.getChild(0)));\n                return Optional.of(new GroupField(type, repetitionLevel, definitionLevel, required, ImmutableList.of(field)));\n            }\n            else if (JSON.equals(type.getTypeSignature().getBase())) {\n                GroupColumnIO groupColumnIO = (GroupColumnIO) columnIO;\n                if (groupColumnIO.getChildrenCount() != 2) {\n                    return Optional.empty();\n                }\n                Optional<Field> value = constructField(VarbinaryType.VARBINARY, groupColumnIO.getChild(0));\n                if (!value.isPresent()) {\n                    throw new IllegalArgumentException(\"Value field is missing for variant type: \" + type);\n                }\n                Optional<Field> metadata = constructField(VarbinaryType.VARBINARY, groupColumnIO.getChild(1));\n                if (!metadata.isPresent()) {\n                    throw new IllegalArgumentException(\"Metadata field is missing for variant type: \" + type);\n                }\n                return Optional.of(new VariantField(type, repetitionLevel, definitionLevel, required, value.get(), metadata.get()));\n            }\n        }\n        else if (columnIO instanceof PrimitiveColumnIO) {\n            PrimitiveColumnIO primitiveColumnIO = (PrimitiveColumnIO) columnIO;\n            RichColumnDescriptor column = new RichColumnDescriptor(primitiveColumnIO.getColumnDescriptor(), columnIO.getType().asPrimitiveType());\n            return Optional.of(new PrimitiveField(type, repetitionLevel, definitionLevel, required, column, primitiveColumnIO.getId()));\n        }\n        return Optional.empty();\n    }\n\n    public static Optional<ColumnIO> findNestedColumnIO(ColumnIO columnIO, List<String> path)\n    {\n        if (columnIO == null) {\n            return Optional.empty();\n        }\n","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-parquet/src/main/java/org/apache/parquet/io/ColumnIOConverter.java#L93-L129","documentation":"Guard in constructField for VARIANT (JSON) typed columns: the parquet variant group lacks the required 'metadata' child field, making the variant encoding incomplete. Fires while mapping a parquet schema to Presto types when the variant group's children do not include metadata.","triggerScenarios":"Thrown at presto-parquet/src/main/java/org/apache/parquet/io/ColumnIOConverter.java:111 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Regenerate the parquet data with a writer that emits the full variant key/metadata/value group","Verify the variant schema follows the expected shimplified/shredded layout"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}