数据的接入、处理、存储与查询,是大数据系统不可或缺的四个环节。随着数据量的增加,大家开始寻找一种高效的数据格式,来解决存储与查询环节的痛点。
- 高效的压缩编码,用于降低存储成本
- 高效的读取能力,用于支撑快速查询
Parquet便是在这样的背景下诞生,与TEXT、JSON、CSV等文件格式相比,它有三个核心特征,为解决上述的痛点问题提供了基础。
- 列式存储
- 自带Schema
- 具备Predicate Filter特性
在行式存储中,一行的多列是连续的写在一起的,而在列式存储中,数据按列分开存储。由于同一列的数据类型是一样的,可以使用更高效的压缩编码进一步节约存储空间。
对于大多数数据存储服务,如MySQL、MongoDB、Elasticsearch等,为了提高查询性能,都会在数据写入时建立相应的索引。而存放在HDFS、AWS S3上的大数据是直接以文件形式存储的,那么如何实现快速查询呢?目前主要有三种手段,核心目的是尽可能只加载有符合数据的文件,而这些手段都能基于Parquet实现。
- Partition Pruning。类似于将文件分文件夹存放的思路,根据某些字段将数据进行分区,在查询时指定相应的分区条件。
- Column Projection。在查询中指定需要返回的字段,跳过不必要的字段,减少需要加载的数据量。
- Predicate