列式存储格式:Parquet

原作者:https://blog.csdn.net/yu616568/article/details/51868447

什么是列式存储

OLAP查询的特点,列式存储可以提升其查询性能,如何做到?

一般关系型数据库都是行存储,日常工作中我们又是仅需要某一列的数据,如果按行存储的化我们需要扫描每一行才能获取列。这样就大大的耗费了成本。而列式存储都是按列进行顺序存储的(每一列都是文件??)所以:

  • 查询时不需要扫描整行,仅查询需要的列,大大降低IO,而且可统计每列的min max sum等。
  • 每列成员都是同构的,针对不同类型可采用压缩降低IO
  • 每一列的成员的同构性,可以使用更加适合CPU pipeline的编码方式,减小CPU的缓存失效

                                                        行存储 对比 列存储

列式存储格式:Parquet_第1张图片

 

Parquet存储格式

兼容MP,spark,支持多种查询引擎 Hive,Impala,Drill等,

数据类型:

文件结构:

二进制方式存储,不可以直接读取和修改。可以自解析,文件中包含文件的数据和元数据。

  • HDFS块(Block):它是HDFS上的最小的副本单位,HDFS会把一个Block存储在本地的一个文件并且维护分散在不同的机器上的多个副本,通常情况下一个Block的大小为256M、512M等。
  • HDFS文件(File):一个HDFS的文件,包括数据和元数据,数据分散存储在多个Block中。
  • 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的行数,在一个HDFS文件中至少存储一个行组,Parquet读写的时候会将整个行组缓存在内存中,所以如果每一个行组的大小是由内存大的小决定的。
  • 列块(Column Chunk):在一个行组中每一列保存在一个列块中,行组中的所有列连续的存储在这个行组文件中。不同的列块可能使用不同的算法进行压缩。
  • 页(Page):每一个列块划分为多个页,一个页是最小的编码的单位,在同一个列块的不同页可能使用不同的编码方式。

通常情况下,在存储Parquet数据的时候会按照HDFS的Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度

数据访问:

列存储优势,获取原始数据时仅需要扫描需要的列,每一列的存储都是顺序的,避免扫描整个文件。

 

ORC文件格式

 

 

 

 

 

 

 

你可能感兴趣的:(Hadoop,etc.)