【发布时间】:2020-07-05 09:47:57
【问题描述】:
如果我们在具有 ORC 或 Parquet 存储格式的下划线文件格式的大型 hive 表中的所有行有多个具有相同值的列,将对存储和性能产生什么影响。
假设我有第 5 列和第 8 列始终以“HELLO”作为值的镶木地板蜂巢表。
- 在这种情况下,如何根据 ORC 和 Parquet 存储文件。
- 如果有重复的列数据,是否会对稍后在此表上使用的查询产生任何性能影响。
【问题讨论】:
如果我们在具有 ORC 或 Parquet 存储格式的下划线文件格式的大型 hive 表中的所有行有多个具有相同值的列,将对存储和性能产生什么影响。
假设我有第 5 列和第 8 列始终以“HELLO”作为值的镶木地板蜂巢表。
【问题讨论】:
至少在 Parquet 文件的情况下,列是独立压缩的。连续多次具有相同的值通常会得到很好的压缩,但重复列也意味着所需存储的重复。
对于 Parquet,压缩方案大致为:
每列,分成 RowGroups(通常每个文件一个,有时更多但通常很少)。每个 RowGroup 对值进行编码(编码通常是字典编码或游程编码)。在名为“pages”的 16KiB/1MiB 边界上大致拆分编码行。使用 GZIP 或 ZStandard 等通用压缩编解码器单独压缩每个页面。
【讨论】: