跳转至

Parquet 数据类型

Parquet类型 (Types)

Parquet 文件格式支持的类型旨在尽可能简化,同时专注于数据类型对磁盘存储的影响。例如,存储格式中不显式支持 16 位整数(16-bit ints),因为可以通过 32 位整数(32-bit ints)结合高效编码来涵盖。这种设计降低了实现读取器和写入器的复杂性。Parquet 支持的数据类型如下:

  - BOOLEAN: 1 位布尔值
  - INT32: 32 位有符号整数
  - INT64: 64 位有符号整数
  - INT96: 96 位有符号整数
  - FLOAT: IEEE 32 位浮点数
  - DOUBLE: IEEE 64 位浮点数
  - BYTE_ARRAY: 可变长度的字节数组
  - FIXED_LEN_BYTE_ARRAY: 固定长度的字节数组

最佳实践

  1. 避免使用 INT96

    • INT96 主要用于时间戳存储(例如 Hive 早期实现),但它并非标准类型,许多现代工具(如 Spark)已不推荐使用。因此,建议尽可能使用 INT64 存储时间戳,并结合 TIMESTAMP 逻辑类型。
  2. 优先使用适合的整数类型

    • 若数值可用 INT32 代表,不要使用 INT64,以减少存储占用和提高处理效率。
    • FIXED_LEN_BYTE_ARRAY 适用于固定长度的数据,如哈希值或 UUID,可减少存储开销。
  3. 使用合适的浮点类型

    • 若精度需求较低,使用 FLOAT 代替 DOUBLE 以节省存储空间。
    • 若数据涉及金融计算,尽量使用 DECIMAL(基于 FIXED_LEN_BYTE_ARRAYBYTE_ARRAY),避免因浮点计算带来的精度问题。
  4. 存储字符串数据

    • 文本数据通常存储为 BYTE_ARRAY,并结合 UTF8 逻辑类型进行编码。
    • 使用字典编码(Dictionary Encoding)和 SNAPPY 压缩以优化存储效率。
  5. 合理选择压缩编码

    • 结合数据类型选择适合的编码方式,例如:
      • RLE(Run Length Encoding)适用于布尔类型和低基数的整数值。
      • BIT-PACKING 适用于 BOOLEAN 以提高存储效率。
      • DELTA 编码适用于递增的 INT32INT64 数据,如时间序列。

合理选择数据类型和编码方式,可以大幅提高 Parquet 文件的存储效率和查询性能。