深入了解列式存储与Parquet文件格式
1. 列式存储概述
在处理数据存储时,常见的数据布局方式有行式存储和列式存储。行式存储是指在将数据写入I/O设备(如平面文件或关系数据库中的表)时,先写入第一行的所有字段,接着是第二行的所有字段,依此类推。大多数关系数据库默认采用这种方式写入表,像XML、JSON和Avro容器文件等数据序列化格式也通常采用行式存储。
列式存储则不同,它先按列、再按行来布局数据。即先写入所有记录中第一个字段的所有值,然后是第二个字段的值,以此类推。
列式存储有两大主要优势:
- 减少I/O操作 :读取列式数据的系统能够高效地提取部分列,从而减少I/O操作。而行式存储系统即使只需要一两个列,通常也需要读取整行数据。
- 数据压缩优化 :在写入列式数据时,可以采用游程编码和位打包等优化技术,有效压缩写入数据的大小。由于列式数据在物理上是相邻的,有大量重复数据,因此通用压缩方案对列式数据的压缩效果也很好。
列式文件格式在处理大型数据集并需要过滤或投影数据时表现出色,这正是OLAP类型用例和MapReduce中常见的工作类型。但Hadoop中使用的大多数数据格式(如JSON和Avro)都是行序的,这意味着在读写这些文件时无法应用上述优化。
例如,对于Hive表中的数据,执行查询 SELECT AVG(price) FROM stocks; 时,如果数据采用行式存储格式,即使只对 price 列进行操作,也需要读取每一行;而在列式存储中,只需读取 price
超级会员免费看
订阅专栏 解锁全文
1105

被折叠的 条评论
为什么被折叠?



