prestodb/presto · error · IllegalArgumentException
Value field is missing for variant type:
Error message
Value field is missing for variant type:
What it means
Guard in constructField for VARIANT (JSON) typed columns: the parquet group for a variant has no child matching the 'value' field, so the variant triple layout (key/value/metadata) is incomplete. Fires when reading a parquet schema whose variant group does not conform to the expected variant encoding.
Source
Thrown at presto-parquet/src/main/java/org/apache/parquet/io/ColumnIOConverter.java:107
return Optional.of(new GroupField(type, repetitionLevel, definitionLevel, required, ImmutableList.of(keyField, valueField)));
}
else if (ARRAY.equals(type.getTypeSignature().getBase())) {
GroupColumnIO groupColumnIO = (GroupColumnIO) columnIO;
List<Type> types = type.getTypeParameters();
if (groupColumnIO.getChildrenCount() != 1) {
return Optional.empty();
}
Optional<Field> field = constructField(types.get(0), getArrayElementColumn(groupColumnIO.getChild(0)));
return Optional.of(new GroupField(type, repetitionLevel, definitionLevel, required, ImmutableList.of(field)));
}
else if (JSON.equals(type.getTypeSignature().getBase())) {
GroupColumnIO groupColumnIO = (GroupColumnIO) columnIO;
if (groupColumnIO.getChildrenCount() != 2) {
return Optional.empty();
}
Optional<Field> value = constructField(VarbinaryType.VARBINARY, groupColumnIO.getChild(0));
if (!value.isPresent()) {
throw new IllegalArgumentException("Value field is missing for variant type: " + type);
}
Optional<Field> metadata = constructField(VarbinaryType.VARBINARY, groupColumnIO.getChild(1));
if (!metadata.isPresent()) {
throw new IllegalArgumentException("Metadata field is missing for variant type: " + type);
}
return Optional.of(new VariantField(type, repetitionLevel, definitionLevel, required, value.get(), metadata.get()));
}
}
else if (columnIO instanceof PrimitiveColumnIO) {
PrimitiveColumnIO primitiveColumnIO = (PrimitiveColumnIO) columnIO;
RichColumnDescriptor column = new RichColumnDescriptor(primitiveColumnIO.getColumnDescriptor(), columnIO.getType().asPrimitiveType());
return Optional.of(new PrimitiveField(type, repetitionLevel, definitionLevel, required, column, primitiveColumnIO.getId()));
}
return Optional.empty();
}
public static Optional<ColumnIO> findNestedColumnIO(ColumnIO columnIO, List<String> path)
{View on GitHub (pinned to 55bb57d202)
Solutions
- Ensure the parquet variant group contains the required 'value' child field per the variant shredding spec
- Check the file was written by a compliant writer; re-write the data if the variant layout is malformed
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-parquet/src/main/java/org/apache/parquet/io/ColumnIOConverter.java:107 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/1bb02ff3688189fb.
Report an issue: GitHub.