prestodb/presto · error · IllegalArgumentException
Unsupported Parquet type:
Error message
Unsupported Parquet type:
What it means
Thrown by getColumnIndexConversions in TupleDomainParquetPredicate when building a converter that decodes Parquet ColumnIndex (page-level min/max) values into Java objects for predicate pushdown. The switch covers BOOLEAN, INT32, INT64, FLOAT, DOUBLE, BINARY, FIXED_LEN_BYTE_ARRAY and INT96; any other primitive type name reaches the default branch and fails. Like the dictionary converter, all current enum members are handled, so it only triggers with an unrecognized type value.
Source
Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/predicate/TupleDomainParquetPredicate.java:705
private Function<Object, Object> getColumnIndexConversions(PrimitiveType type)
{
switch (type.getPrimitiveTypeName()) {
case BOOLEAN:
return buffer -> ((ByteBuffer) buffer).get(0) != 0;
case INT32:
return buffer -> (long) ((ByteBuffer) buffer).order(LITTLE_ENDIAN).getInt(0);
case INT64:
return buffer -> ((ByteBuffer) buffer).order(LITTLE_ENDIAN).getLong(0);
case FLOAT:
return buffer -> ((ByteBuffer) buffer).order(LITTLE_ENDIAN).getFloat(0);
case DOUBLE:
return buffer -> ((ByteBuffer) buffer).order(LITTLE_ENDIAN).getDouble(0);
case BINARY:
case FIXED_LEN_BYTE_ARRAY:
case INT96:
return binary -> ByteBuffer.wrap(((Binary) binary).getBytes());
default:
throw new IllegalArgumentException("Unsupported Parquet type: " + type.getPrimitiveTypeName());
}
}
}
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Upgrade to a Presto release that supports the primitive type present in the file.
- Add a case for the missing PrimitiveTypeName in getColumnIndexConversions, returning the correct ByteBuffer decoder.
- Work around by dropping or rewriting the column index (rewrite file with parquet-tools rewrite or disable column-index filtering for that column).
- Inspect the file's column statistics types with parquet-tools to confirm the offending type.
Example fix
// before
default:
throw new IllegalArgumentException("Unsupported Parquet type: " + type.getPrimitiveTypeName());
// after
case NEW_PRIMITIVE_TYPE:
return binary -> ByteBuffer.wrap(((Binary) binary).getBytes());
default:
throw new IllegalArgumentException("Unsupported Parquet type: " + type.getPrimitiveTypeName()); Defensive patterns
Strategy: validation
Validate before calling
// Guard before enabling column-index based filtering
PrimitiveTypeName name = type.getPrimitiveTypeName();
boolean supported = name == PrimitiveTypeName.BOOLEAN || name == PrimitiveTypeName.INT32 ||
name == PrimitiveTypeName.INT64 || name == PrimitiveTypeName.FLOAT ||
name == PrimitiveTypeName.DOUBLE || name == PrimitiveTypeName.BINARY ||
name == PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY || name == PrimitiveTypeName.INT96;
if (!supported) { /* disable column index pushdown for this column */ } Prevention
- Upgrade Presto to a release matching the parquet writer version that produced the files.
- Disable column-index filtering when scanning files from untested writers.
- Rewrite files with standard types and current writers.
When it happens
Trigger: getColumnIndexConversions(type) is called while reading a column's Parquet ColumnIndex statistics and the column's PrimitiveTypeName is not among the eight handled values — realistically only a newly introduced PrimitiveTypeName enum value from a newer parquet-mr, since BOOLEAN and all numeric/binary types are covered.
Common situations: Mixed-version clusters where files written by a newer Parquet writer (new primitive type) are read by an older Presto build; library dependency drift where presto-parquet pulls an older parquet-column enum than the writer used.
Related errors
- Unsupported Parquet primitive type:
- PARQUET_UNSUPPORTED_COLUMN_TYPE
- Impossible boolean statistics
- Can't convert value to long:
- NOT_SUPPORTED
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/dd8a89b5063a84cf.
Report an issue: GitHub.