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

  1. Examine the cause chain for the real I/O error and fix the storage/network issue
  2. Retry the query for transient errors
  3. Validate the file; regenerate truncated or corrupt data
  4. 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

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.