prestodb/presto · error · PrestoException
PARQUET_IO_READ_ERROR
PARQUET_IO_READ_ERROR
Error message
Error reading Parquet column
What it means
BooleanFlatBatchReader.readNext catches IOExceptions while reading a flat BOOLEAN column chunk and rethrows as PrestoException with PARQUET_IO_READ_ERROR, message 'Error reading Parquet column ' + ColumnDescriptor, cause preserved. Same failure class as the binary reader but for boolean columns; the column descriptor in the message identifies the failing column. The chunk could not be read from storage/decoded at the IO level.
Source
Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/BooleanFlatBatchReader.java:109
readOffset = readOffset + nextBatchSize;
nextBatchSize = batchSize;
}
@Override
public ColumnChunk readNext(Optional<DateTimeZone> timezone)
{
ColumnChunk columnChunk = null;
try {
seek();
if (field.isRequired()) {
columnChunk = readWithoutNull();
}
else {
columnChunk = readWithNull();
}
}
catch (IOException exception) {
throw new PrestoException(PARQUET_IO_READ_ERROR, "Error reading Parquet column " + columnDescriptor, exception);
}
readOffset = 0;
nextBatchSize = 0;
return columnChunk;
}
@Override
public long getRetainedSizeInBytes()
{
return INSTANCE_SIZE +
(definitionLevelDecoder == null ? 0 : definitionLevelDecoder.getRetainedSizeInBytes()) +
(valuesDecoder == null ? 0 : valuesDecoder.getRetainedSizeInBytes()) +
(dictionary == null ? 0 : dictionary.getRetainedSizeInBytes()) +
(pageReader == null ? 0 : pageReader.getRetainedSizeInBytes());
}
protected boolean readNextPage()View on GitHub (pinned to 55bb57d202)
Solutions
- Check the cause chain for transient storage errors and simply retry the query if so.
- Validate the file with parquet-tools; if corrupt or truncated, restore from source or rewrite the table partition.
- Confirm storage credentials/permissions are valid for the full scan duration.
- If reproducible, isolate the failing column chunk metadata and investigate the writer that produced it.
Defensive patterns
Strategy: retry
Validate before calling
// preflight: open the file and read its footer before scanning boolean columns
ParquetMetadata footer = ParquetFileReader.readFooter(conf, new Path(path));
footer.getBlocks().forEach(b -> b.getColumns().forEach(c -> {
if (c.getType().equals(PrimitiveTypeName.BOOLEAN)) { /* mark column for guarded read */ }
})); Try / catch
try {
column = booleanReader.readNext();
} catch (PrestoException e) {
if (e.getErrorCode().getName().contains("PARQUET_IO_READ_ERROR") && e.getCause() instanceof IOException) {
column = retryReadWithBackoff(booleanReader); // only retry transient IO causes
} else { throw e; }
} Prevention
- Retry only IOException-backed causes; decode errors will not fix themselves.
- Validate file integrity after any write/copy pipeline change.
- Alert on PARQUET_IO_READ_ERROR clusters — they usually indicate a storage problem, not a query problem.
When it happens
Trigger: readNext() on a boolean flat column when readWithNull or the underlying page readers throw IOException (unreadable page, storage error).
Common situations: S3/HDFS transient failures during scans; corrupted or truncated Parquet files; reader/writer incompatibility producing undecodable boolean RLE pages.
Related errors
- PARQUET_IO_READ_ERROR
- PARQUET_IO_READ_ERROR
- PARQUET_IO_READ_ERROR
- PARQUET_IO_READ_ERROR
- HUDI_CANNOT_OPEN_SPLIT
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/3bc8bd191fe7d421.
Report an issue: GitHub.