跳转至

Parquet 元数据 (Metadata)

在 Apache Parquet 文件中,元数据主要分为两种类型:文件元数据(File Metadata)页头元数据(Page Header Metadata)

在下图中,文件元数据由 FileMetaData 结构描述。文件元数据提供了偏移量和大小等信息,这些信息对于解析和导航 Parquet 文件至关重要。而页头元数据(在图中以 PageHeader 及其子结构表示)则与页面数据(Page Data)存储在一起,并用于读取和解码这些数据。

所有的 Thrift 结构都使用 TCompactProtocol 进行序列化。完整的结构定义可在 Parquet 的 Thrift 定义 中找到。


最佳实践

1. 理解元数据的重要性

  • 文件元数据(File Metadata)存储在文件末尾,并包含列块(Row Group)的偏移量、模式定义(Schema)、编码方式等关键信息,便于快速查找数据块。
  • 页头元数据(Page Header Metadata)存储在每个数据页(Page)前面,包含编码方式、压缩方式等信息,影响数据的读取和解码。

2. 充分利用元数据进行优化

  • 列裁剪(Column Pruning):根据 FileMetaData 仅读取需要的列,提高查询效率。
  • 行组筛选(Row Group Pruning):使用 FileMetaData 中的统计信息(min/max 值)来跳过不相关的行组,提高查询性能。
  • 索引加速:可以基于 PageHeader 记录的偏移量信息,构建索引以优化数据扫描。

3. 避免不必要的元数据开销

  • 尽量减少小文件:小文件过多会导致元数据开销增大,影响查询性能。可以合并小文件以优化查询效率。
  • 控制页大小(Page Size):过小的页面会导致元数据膨胀,过大的页面则可能影响解码性能。一般建议 128KB ~ 1MB 之间。

4. 解析元数据进行调试

  • 使用 parquet-tools meta <file> 查看文件元数据,以检查文件结构是否符合预期。
  • 解析 parquet.thrift 结构,了解内部存储细节,帮助优化查询和存储策略。