{"record":{"id":"5ebd940933cbc004","repo":"prestodb/presto","slug":"parquet-io-read-error-5ebd94","errorCode":"PARQUET_IO_READ_ERROR","errorMessage":"Error reading Parquet column ","messagePattern":"Error reading Parquet column ","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/Int64TimeAndTimestampMicrosFlatBatchReader.java","lineNumber":109,"sourceCode":"        readOffset = readOffset + nextBatchSize;\n        nextBatchSize = batchSize;\n    }\n\n    @Override\n    public ColumnChunk readNext(Optional<DateTimeZone> timezone)\n    {\n        ColumnChunk columnChunk = null;\n        try {\n            seek();\n            if (field.isRequired()) {\n                columnChunk = readWithoutNull();\n            }\n            else {\n                columnChunk = readWithNull();\n            }\n        }\n        catch (IOException exception) {\n            throw new PrestoException(PARQUET_IO_READ_ERROR, \"Error reading Parquet column \" + columnDescriptor, exception);\n        }\n\n        readOffset = 0;\n        nextBatchSize = 0;\n        return columnChunk;\n    }\n\n    @Override\n    public long getRetainedSizeInBytes()\n    {\n        return INSTANCE_SIZE +\n                (definitionLevelDecoder == null ? 0 : definitionLevelDecoder.getRetainedSizeInBytes()) +\n                (valuesDecoder == null ? 0 : valuesDecoder.getRetainedSizeInBytes()) +\n                (dictionary == null ? 0 : dictionary.getRetainedSizeInBytes()) +\n                (pageReader == null ? 0 : pageReader.getRetainedSizeInBytes());\n    }\n\n    protected boolean readNextPage()","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-parquet/src/main/java/com/facebook/presto/parquet/batchreader/Int64TimeAndTimestampMicrosFlatBatchReader.java#L91-L127","documentation":"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.","triggerScenarios":"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.","commonSituations":"Transient object-storage failures; checksum/verification errors on the block; corrupted compressed page; unsupported codec written by a newer tool version.","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"],"exampleFix":"// before\nchunk = reader.readNext(); // opaque PARQUET_IO_READ_ERROR\n// after\ntry {\n    chunk = reader.readNext();\n} catch (PrestoException e) {\n    log.error(e.getCause(), \"failed reading temporal column %s\", columnDescriptor);\n    throw e;\n}","handlingStrategy":"try-catch","validationCode":"// check codec support and file readability up front\nif (!isCodecSupported(metadata.getCodec())) {\n    throw new PrestoException(NOT_SUPPORTED, \"codec \" + metadata.getCodec());\n}","typeGuard":null,"tryCatchPattern":"try {\n    reader.readNext();\n} catch (PrestoException e) {\n    if (e.getErrorCode() == PARQUET_IO_READ_ERROR) {\n        retryWithBackoffOrFailover();\n    } else throw e;\n}","preventionTips":["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"],"tags":["parquet","io","timestamp"],"backgroundTag":"parquet-io-read-error","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}