Hive中Parquet格式对空字符串与常量字符串的存储压缩效果?
Parquet在两种字符串场景下的压缩效果分析
针对超大型表中字符串字段的两种场景,Parquet的压缩表现及空间节省情况如下:
1. 空字符串场景
Parquet作为列存格式,对重复度高的数据天然具备压缩优势。对于全是空字符串的列:
- 会优先使用字典编码(Dictionary Encoding),仅在字典中存储一次空字符串,所有行都通过指向该字典条目的索引来表示,彻底避免重复存储相同内容;
- 再配合**行程长度编码(RLE)**对重复的字典索引做进一步压缩,把大量连续的相同索引转化为“重复次数+索引值”的极简格式;
- 最后叠加Snappy、Gzip这类通用压缩算法后,空字符串列的存储空间会被压缩到极致,能节省绝大多数原本的存储空间。
2. 常量值字符串场景
所有字段值完全相同的情况,压缩逻辑与空字符串类似,且压缩效果同样突出:
- 字典编码会将这个唯一的常量值存入字典,所有行仅用一个极小的索引值指代该常量;
- RLE编码会把连续的相同索引高效压缩,进一步降低数据体积;
- 再经过通用压缩算法处理后,整个列的存储空间会远小于传统行存格式,甚至能达到几十倍的压缩比,空间节省效果非常显著。
内容的提问来源于stack exchange,提问作者Eyal
相关产品推荐
相关产品推荐

