prestodb/presto · error · PrestoException
NOT_SUPPORTED
NOT_SUPPORTED
Error message
Unsupported parquet type:
What it means
ColumnReaderFactory.createReader maps a Parquet physical type to a ColumnReader implementation; when the primitive type falls through all supported cases (e.g., an unexpected INT96 usage or unmapped physical type), a PrestoException with NOT_SUPPORTED is raised. The library simply has no reader for that Parquet type combination.
Source
Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/ColumnReaderFactory.java:142
return new LongTimeMicrosColumnReader(descriptor);
}
return createDecimalColumnReader(descriptor).orElseGet(() -> new LongColumnReader(descriptor));
case INT96:
return new TimestampColumnReader(descriptor);
case FLOAT:
return new FloatColumnReader(descriptor);
case DOUBLE:
return new DoubleColumnReader(descriptor);
case BINARY:
return createDecimalColumnReader(descriptor).orElseGet(() -> new BinaryColumnReader(descriptor));
case FIXED_LEN_BYTE_ARRAY:
if (isUuidType(descriptor)) {
return new BinaryColumnReader(descriptor);
}
return createDecimalColumnReader(descriptor)
.orElseThrow(() -> new PrestoException(NOT_SUPPORTED, " type FIXED_LEN_BYTE_ARRAY supported as DECIMAL; got " + descriptor.getPrimitiveType().getOriginalType()));
default:
throw new PrestoException(NOT_SUPPORTED, "Unsupported parquet type: " + descriptor.getPrimitiveType().getPrimitiveTypeName());
}
}
private static Optional<ColumnReader> createDecimalBatchColumnReader(RichColumnDescriptor descriptor)
{
if (isDecimalType(descriptor)) {
if (isShortDecimalType(descriptor)) {
return Optional.of(new ShortDecimalFlatBatchReader(descriptor));
}
return Optional.of(new LongDecimalFlatBatchReader(descriptor));
}
return Optional.empty();
}
private static Optional<AbstractColumnReader> createDecimalColumnReader(RichColumnDescriptor descriptor)
{
if (isDecimalType(descriptor)) {
if (isShortDecimalType(descriptor)) {View on GitHub (pinned to 55bb57d202)
Solutions
- Upgrade Presto to a version supporting the type.
- Exclude/reproject the unsupported column from the query or table schema.
- Rewrite the Parquet file with supported types (e.g., cast to DECIMAL/BINARY in the writer pipeline).
- Convert the file with parquet-tools/Spark to a supported type set before ingestion.
Example fix
// before: selecting unsupported column SELECT weird_col FROM parquet_table; // after SELECT CAST(other_col AS VARCHAR) AS safe_col FROM parquet_table; // drop weird_col
Defensive patterns
Strategy: validation
Validate before calling
Set<PrimitiveTypeName> supported = Set.of(INT96, BINARY, INT64, DOUBLE, FLOAT, BOOLEAN, INT32, FIXED_LEN_BYTE_ARRAY);
if (!supported.contains(schema.getType("col"))) throw new IllegalArgumentException("unsupported parquet type"); Try / catch
try { reader = ColumnReaderFactory.createReader(descriptor); } catch (PrestoException e) {
if (e.getErrorCode().equals(NOT_SUPPORTED.toErrorCode())) {
columns.remove(descriptor); return; // skip unsupported column
}
throw e;
} Prevention
- Keep Presto/parquet reader current with writers producing the files.
- Restrict table schemas to supported types.
- Convert files with exotic types (BROTLI-era INTERVAL/JSON annotations) before ingestion.
- Document supported type matrix for producers.
When it happens
Trigger: A Parquet file contains a column whose PrimitiveTypeName has no case in createReader — typically an exotic/unmapped type or a type reached via a schema combination the reader doesn't handle.
Common situations: Files written by newer/other engines with types Presto's parquet reader predates (e.g., certain INTERVAL/JSON annotations); TIMESTAMP_MILLIS conversions not covered; reading files from tools emitting rare types.
Understand the failure class
Background: Presto NOT_SUPPORTED error: what "not supported" means and how to fix it — this error's family across 3 libraries.
Related errors
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/d781f6c5d77ee981.
Report an issue: GitHub.