prestodb/presto · error · PrestoException
PARQUET_IO_READ_ERROR
PARQUET_IO_READ_ERROR
Error message
Error reading Parquet column
What it means
Int64TimeAndTimestampMicrosFlatBatchReader.readNext wraps any IOException from reading/decoding pages of a TIME_MICROS/TIMESTAMP_MICROS int64 column into a PrestoException with PARQUET_IO_READ_ERROR plus the column descriptor. It reports an I/O or decode-level failure while reading the temporal column.
Source
Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/Int64TimeAndTimestampMicrosFlatBatchReader.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
- Examine the cause chain for the real I/O error and fix the storage/network issue
- Retry the query for transient errors
- Validate the file; regenerate truncated or corrupt data
- Confirm Presto supports the file's compression codec; upgrade if needed
Example fix
// before
chunk = reader.readNext(); // opaque PARQUET_IO_READ_ERROR
// after
try {
chunk = reader.readNext();
} catch (PrestoException e) {
log.error(e.getCause(), "failed reading temporal column %s", columnDescriptor);
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
// check codec support and file readability up front
if (!isCodecSupported(metadata.getCodec())) {
throw new PrestoException(NOT_SUPPORTED, "codec " + metadata.getCodec());
} Try / catch
try {
reader.readNext();
} catch (PrestoException e) {
if (e.getErrorCode() == PARQUET_IO_READ_ERROR) {
retryWithBackoffOrFailover();
} else throw e;
} Prevention
- Confirm compression codec support before running queries
- Retry transient storage errors with backoff
- Log cause chains to distinguish IO vs decode failures
- Validate footers and page checksums on ingest
When it happens
Trigger: IOException raised during page read, decompression, or int64 value decoding for a micros-precision time/timestamp column during readNext — e.g. broken HDFS/S3 stream or corrupted page.
Common situations: Transient object-storage failures; checksum/verification errors on the block; corrupted compressed page; unsupported codec written by a newer tool version.
Related errors
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/5ebd940933cbc004.
Report an issue: GitHub.