prestodb/presto · error · ParquetCorruptionException
Codec not supported in Parquet:
Error message
Codec not supported in Parquet:
What it means
ParquetCompressionUtils.decompress dispatches on the Parquet column-chunk codec; codecs outside SNAPPY/GZIP/LZO/LZ4/ZSTD hit the default branch and throw ParquetCorruptionException 'Codec not supported in Parquet'. Either the enum has an unsupported member or the page header was misread.
Source
Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/ParquetCompressionUtils.java:66
if (input.length() == 0) {
return EMPTY_SLICE;
}
switch (codec) {
case GZIP:
return decompressGzip(input, uncompressedSize);
case SNAPPY:
return decompressSnappy(input, uncompressedSize);
case UNCOMPRESSED:
return input;
case LZO:
return decompressLZO(input, uncompressedSize);
case LZ4:
return decompressLz4(input, uncompressedSize);
case ZSTD:
return decompressZstd(input, uncompressedSize);
default:
throw new ParquetCorruptionException("Codec not supported in Parquet: " + codec);
}
}
private static Slice decompressSnappy(Slice input, int uncompressedSize)
{
byte[] buffer = new byte[uncompressedSize];
decompress(new SnappyDecompressor(), input, 0, input.length(), buffer, 0);
return wrappedBuffer(buffer);
}
private static Slice decompressZstd(Slice input, int uncompressedSize)
{
byte[] buffer = new byte[uncompressedSize];
decompress(new ZstdDecompressor(), input, 0, input.length(), buffer, 0);
return wrappedBuffer(buffer);
}
private static Slice decompressGzip(Slice input, int uncompressedSize)View on GitHub (pinned to 55bb57d202)
Solutions
- Upgrade Presto to a build supporting the codec (e.g., LZ4_RAW, BROTLI support).
- Rewrite/convert the Parquet file with SNAPPY or GZIP compression.
- Recompress with a supported codec using parquet-tools/Spark before loading.
- Verify file metadata isn't corrupted (re-transfer, validate with parquet-tools meta).
Example fix
// before: file written with BROTLI
spark.write.parquet(...).option("compression", "brotli")
// after
spark.write.parquet(...).option("compression", "snappy") Defensive patterns
Strategy: validation
Validate before calling
CompressionCodecName codec = footer.getFileMetaData().getCreatedBy() != null ? chunk.getCodec() : null;
EnumSet<CompressionCodecName> ok = EnumSet.of(SNAPPY, GZIP, LZO, LZ4, ZSTD);
if (!ok.contains(chunk.getCodec())) throw new IllegalArgumentException("unsupported codec: " + chunk.getCodec()); Try / catch
try { ParquetCompressionUtils.decompress(codec, input, size); } catch (ParquetCorruptionException e) {
throw new DataCorruptionException("unsupported parquet codec", e);
} Prevention
- Standardize producers on SNAPPY/GZIP.
- Upgrade Presto to gain newer codec support (LZ4_RAW, BROTLI).
- Validate files with parquet-tools meta at ingest.
- Avoid writing with experimental codecs into shared lakes.
When it happens
Trigger: A Parquet file's column chunk metadata specifies a codec this Presto build cannot decode (e.g., BROTLI or a newer codec like LZ4_RAW on old versions).
Common situations: Files written by tools using BROTLI or LZ4_RAW compression; old Presto version lacking newer codec support; corrupted footer metadata yielding a bogus enum.
Related errors
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/1a7c5460f04f6672.
Report an issue: GitHub.