Parquet’s efficiency stems from its three-tier hierarchical structure. At the top level, row groups provide the unit of parallelisation – different threads or compute nodes can process separate row groups independently. Within each row group, column chunks store all values for a single column contiguously, allowing your query engine to read only the appropriate columns. Finally, column chunks are split into pages, which represent the atomic unit where compression and encoding occur.
This isn’t just clever organisation – it’s a deliberate balance of competing demands. Large blocks optimise sequential reads, while smaller pages enable precise access patterns. The structure allows query engines to make intelligent decisions about what data to read, when to read it, and how to process it in parallel.