跳转至

Parquet 数据页 (Data Pages)

在数据页中,三个部分的信息在页头(page header)之后依次进行编码,且数据页内不允许填充(padding)。这些部分按以下顺序排列:

  1. 重复级别数据(repetition levels data)
  2. 定义级别数据(definition levels data)
  3. 编码后的值(encoded values)

页头中指定的 uncompressed_page_size(未压缩页面大小)是上述三部分数据的总和。

数据页内容解析

数据页中的编码值(encoded values)是必须的,而定义级别(definition levels)和重复级别(repetition levels)是可选的,这取决于模式(schema)的定义:

  • 非嵌套列(non-nested column):如果列路径的长度为 1(即该列不是嵌套结构),则不会对重复级别进行编码,因为其值始终为 1。
  • 必需数据(required data):如果数据列是必需的(required),则会跳过定义级别的编码(如果编码,值始终等于最大定义级别)。

例如,对于非嵌套且必需的列,数据页仅包含编码后的值

相关支持特性


最佳实践

  1. 优化存储大小

    • 如果列是非嵌套的,应避免存储不必要的重复级别数据,以减少存储开销。
    • 对于必需列,可以跳过定义级别数据的存储,以节省空间。
  2. 合理选择编码方式

    • 选择合适的编码格式(如 RLE, PLAIN, DICTIONARY)以提高压缩率和查询性能。
    • 对于低基数(low cardinality)数据,优先使用字典编码(DICTIONARY)。
  3. 压缩策略优化

    • 根据数据分布选择最佳压缩编解码器。例如:
      • Snappy 适用于快速解压缩场景。
      • Gzip 提供更高压缩率,适用于存储优化。
      • Zstd 兼具高压缩比和解压缩速度,适用于通用场景。
  4. 数据页大小控制

    • 适当调整 uncompressed_page_size 以平衡查询性能与存储效率,避免过大的数据页影响查询优化。

通过遵循这些最佳实践,可以有效优化 Parquet 数据页的存储和查询效率,提高整体性能。