Anatomy of an Apache Parquet file
The anatomy of an Apache Parquet file, as of the time of writing, is shown below.
┌────────────────────────────────────────────────────────────────┐
│ "PAR1" ASCII string (4 bytes) │
├────────────────────────────────────────────────────────────────┤
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Row Group 1 │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ Column Chunk 1 | | |
| | | ┌─────────────────────────────────────────────────┐ | | |
| | | | Page 1 | | | |
| | | | | | | |
| | | | - Page header metadata (Thrift) | | | |
| | | | - Repetition levels | | | |
| | | | - Definition levels | | | |
| | | | - Values | | | |
| | | └─────────────────────────────────────────────────┘ | | |
| | | ... (additional pages) | | |
│ │ └─────────────────────────────────────────────────────┘ │ │
│ │ ... (additional column chunks) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ ... (additional row groups) │
├────────────────────────────────────────────────────────────────┤
│ FileMetaData (Thrift) │
├────────────────────────────────────────────────────────────────┤
│ FileMetadata size (4 bytes, little endian) |
├────────────────────────────────────────────────────────────────┤
│ "PAR1" ASCII string (4 bytes) │
└────────────────────────────────────────────────────────────────┘
Details about:
- Repetition and definition levels are given in the Dremel paper.
- The file and the page header metadata are given on the relevant Apache Parquet webpage.