普通的存储格式,比如我们表格中有abc三列,像mysql按行存储则如下所示
大数据引擎存储中,大部分都是采用列式存储,比如Hive、Hbase
a、b、c各列数据会集中存放在一起,如下所示
Hive中textfile作为缺省的存储格式,采用列式存储,Hive也提供了ORC存储格式,ORC格式能采用更好的压缩算法、更高效的查询。结合了行存储和列式存储的优点
每个ORC文件由1个或多个条带(stripe)组成,每个条带一般是一个HDFS块。每个条带由Index Data、Row Data、 Stripe Footer组成。
Index Data:保存了一些索引信息,记录着每个数据段在stripe中的位置。
Row Data:主要存放数据的地方,一个Rows Data由多个行组构成,每10000行构成一个行组,行组内部以流式形式列式存储,实际上由两部分构成:metadata Stream描述行组的元数据,dataStream数据流。
Stripe Footer:描述各个stream的类型、长度等信息
另外,每个orc文件中除若干个stripe外,还包含file footer(文件脚注)、postscript(描述信息)
file footer:记录每个stripe的行数,每个列的数据类型,每个列的最大值、最小值等信息。
postscript:压缩参数、压缩大小等信息
读取orc文件时,先读取postscript信息,根据postscript记录的filefooter长度信息,解析filefooter,再从filefooter中解析出各个stripe信息,再读取各个stripe。