prestodb/presto · error · ParquetCorruptionException

Metadata is missing for column: %s

Error message

Metadata is missing for column: %s

What it means

Lookup guard for encrypted Parquet files: the column's decryption setup (ColumnPath -> ordinal) is absent from the file's encryption metadata, so a page reader cannot be built. Means the footer encryption metadata is incomplete or references a column that does not exist.

Source

Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetReader.java:527

        int columnOrdinal = fileDecryptor.get().getColumnSetup(ColumnPath.get(columnChunk.getDescriptor().getColumnDescriptor().getPath())).getOrdinal();
        return columnChunk.buildPageReader(fileDecryptor, currentBlock, columnOrdinal);
    }

    private boolean isEncryptedColumn(Optional<InternalFileDecryptor> fileDecryptor, ColumnDescriptor columnDescriptor)
    {
        ColumnPath columnPath = ColumnPath.get(columnDescriptor.getPath());
        return fileDecryptor.isPresent() && !fileDecryptor.get().plaintextFile() && fileDecryptor.get().getColumnSetup(columnPath).isEncrypted();
    }

    private ColumnChunkMetaData getColumnChunkMetaData(ColumnDescriptor columnDescriptor)
            throws IOException
    {
        for (ColumnChunkMetaData metadata : currentBlockMetadata.getColumns()) {
            if (!HiddenColumnChunkMetaData.isHiddenColumn(metadata) && metadata.getPath().equals(ColumnPath.get(columnDescriptor.getPath()))) {
                return metadata;
            }
        }
        throw new ParquetCorruptionException("Metadata is missing for column: %s", columnDescriptor);
    }

    private void initializeColumnReaders()
    {
        for (PrimitiveColumnIO columnIO : columns) {
            RichColumnDescriptor column = new RichColumnDescriptor(columnIO.getColumnDescriptor(), columnIO.getType().asPrimitiveType());
            columnReaders[columnIO.getId()] = ColumnReaderFactory.createReader(column, batchReadEnabled);

            if (enableVerification) {
                verificationColumnReaders[columnIO.getId()] = ColumnReaderFactory.createReader(column, false);
            }
        }
    }

    public Block readBlock(Field field)
            throws IOException
    {
        return readColumnChunk(field).getBlock();

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Confirm the file's encryption metadata lists every encrypted column
  2. Regenerate the file with a writer that emits complete encryption metadata
  3. Verify the schema path in the query matches the file's column paths
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ParquetReader.java:527 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/42539b4182280425. Report an issue: GitHub.