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

  1. Ensure the parquet variant group contains the required 'value' child field per the variant shredding spec
  2. 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.