深入理解 Parquet 列式存储及其应用
1. 列式存储概述
在数据存储中,常见的方式是行式存储,即先写入第一行的所有字段,接着是第二行,依此类推。大多数关系型数据库默认采用这种方式存储表,像 XML、JSON 和 Avro 容器文件等数据序列化格式也是如此。
列式存储则不同,它先按列、再按行来布局数据。先写入所有记录中第一个字段的所有值,然后是第二个字段,以此类推。列式存储有两大主要优势:
- 减少 I/O 操作 :读取列式数据的系统能高效提取部分列,减少 I/O 开销。而行式存储系统即便只需要一两个列,通常也得读取整行数据。
- 数据压缩优化 :在写入列式数据时可进行优化,如游程编码和位打包,有效压缩写入数据的大小。通用压缩方案对列式数据也有很好的压缩效果,因为列式数据物理上相邻,有大量重复数据,适合压缩。
列式文件格式在处理大型数据集、需要过滤或投影数据时表现出色,常用于 OLAP 场景和 MapReduce 中。Hadoop 中多数数据格式(如 JSON 和 Avro)是行序的,无法应用上述优化。例如,在 Hive 表中执行 SELECT AVG(price) FROM stocks; 查询时,若数据是行式存储,每行都要读取;而列式存储只需读取 price 列,处理大型数据集时能大幅缩短处理时间。
2. Hadoop 中的列式存储选项
Hadoop 中有多种列式存储选项:
| 格式 | Hadoop 支持 | 支持的对象模型 | 支持的编程语言 | 高级压缩支持
超级会员免费看
订阅专栏 解锁全文
617

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



