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: 固定长度的字节数组
最佳实践
-
避免使用 INT96
INT96
主要用于时间戳存储(例如 Hive 早期实现),但它并非标准类型,许多现代工具(如 Spark)已不推荐使用。因此,建议尽可能使用INT64
存储时间戳,并结合TIMESTAMP
逻辑类型。
-
优先使用适合的整数类型
- 若数值可用
INT32
代表,不要使用INT64
,以减少存储占用和提高处理效率。 FIXED_LEN_BYTE_ARRAY
适用于固定长度的数据,如哈希值或 UUID,可减少存储开销。
- 若数值可用
-
使用合适的浮点类型
- 若精度需求较低,使用
FLOAT
代替DOUBLE
以节省存储空间。 - 若数据涉及金融计算,尽量使用
DECIMAL
(基于FIXED_LEN_BYTE_ARRAY
或BYTE_ARRAY
),避免因浮点计算带来的精度问题。
- 若精度需求较低,使用
-
存储字符串数据
- 文本数据通常存储为
BYTE_ARRAY
,并结合UTF8
逻辑类型进行编码。 - 使用字典编码(Dictionary Encoding)和
SNAPPY
压缩以优化存储效率。
- 文本数据通常存储为
-
合理选择压缩编码
- 结合数据类型选择适合的编码方式,例如:
RLE
(Run Length Encoding)适用于布尔类型和低基数的整数值。BIT-PACKING
适用于BOOLEAN
以提高存储效率。DELTA
编码适用于递增的INT32
和INT64
数据,如时间序列。
- 结合数据类型选择适合的编码方式,例如:
合理选择数据类型和编码方式,可以大幅提高 Parquet 文件的存储效率和查询性能。