概述
Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。
parquet-format
parquet-format 存储库托管 Apache Parquet 文件格式的官方规范,该规范定义了数据的结构和存储方式。此规范以及 Thrift 元数据定义和其他关键组件对于开发人员有效读取和写入 Parquet 文件至关重要。parquet-format 项目专门包含理解和正确使用 Parquet 文件所需的格式规范。
作为一个专注于规范的存储库,parquet 格式的存储库不包含源代码。
文件格式
应该将此文件和 thrift 定义一起阅读才能理解其格式。
在上面的例子中,该表有 N 列,分为 M 个行组。文件元数据包含所有列块(column chunks)起始位置的位置。有关元数据中包含的内容的更多详细信息,请参阅 Thrift 定义。
该格式明确设计用于将元数据与数据分离。这样可以将列拆分为多个文件,也可以让单个元数据文件引用多个 parquet 文件。
配置
行组大小
较大的行组允许较大的列块,从而可以进行较大的顺序 IO。建议使用较大的行组(512MB - 1GB)。
数据页大小
数据页应被视为不可分割的,因此较小的数据页允许更细粒度的读取(例如单行查找)。较大的页面大小会产生较少的空间开销(较少的页眉)和潜在的较少的解析开销(处理页眉)。建议页面大小为 8KB。
元数据
元数据有两种类型:文件元数据和页眉(page header)元数据。
文件元数据由FileMetaData
结构描述,此文件元数据提供在浏览 Parquet 文件时有用的偏移量和大小信息。
页眉元数据(PageHeader
以及图中的子元数据)与页面数据内联存储,并用于读取和解码所述数据。
所有 thrift 结构都使用 TCompactProtocol 序列化。这些结构的完整定义在 Parquet Thrift 定义中给出。