码迷,mamicode.com
首页 > 其他好文 > 详细

[Hive]-列式存储篇

时间:2018-06-03 17:32:02      阅读:1536      评论:0      收藏:0      [点我收藏+]

标签:文件的   阅读   strip   hive   种类型   位置   ado   不用   参考资料   

1. ORC是什么

  ORC,全称 Optimized Row Columnar.是Hadoop生态圈的列式存储概念,最早由Hive提出.\

  在Hive的ORC,首先依然是根据行组分割整个表,但是在每个行组中,按列存储.ORC文件是自描述的,它的元数据使用Protocol Buffers进行序列化,并尽可能的进行压缩

2.ORC的好处

  列式存储有很高的压缩比.(因为同列数据,数据格式,重复率等相同几率很高,并且可以针对列相同的数据类型,采用更好的压缩方式)

  优化查询效率(可以只查询某些需要的列而不用扫整个数据,降低IO)

  提供了多种索引()row group index、bloom filter index等),并且可以保存列本身的统计信息(Min,Max,Sum等),对部分查询谓词效率更高

  可以支持更为复杂的数据结构.比如Map,或者更加不规则的数据结构

3.存储结构

  Hive.ORC中,数据以二进制文件存储,所以是不可以直接阅读的,而元数据是随同ORC一起的,所以是自解析的.具体如下:

  ORC文件:保存在HDFS的普通二进制文件,每一个ORC文件包含多个stripe,每一个stripe包含多条数据.针对每一个stripe,进行列式存储.

  ORC文件级元数据:包含整个ORC文件的描述信息,文件Meta和统计信息,所有在此ORC文件的stripe信息和文件的shemale信息,保存在文件的末尾.

  stripe:一组行形成一个stripe,读写的最小单位(每次读写至少读取一个stripe),一般为HDFS的一个块大小,保存了每一列的索引和数据

  stripe元数据:保存stripe的位置,每一个列在本stripe的统计信息以及所有Stream信息

  row group:行组. 索引化的最小单位,一个stripe包含多个row group

  stream:一个stream表示文件中有效的一段.包括索引和数据两类。索引stream保存每一个row group的位置和统计信息,数据stream包括多种类型的数据,具体需要哪几种是由该列类型和编码方式决定

4.索引统计

  ORC文件中包含三个级别的统计信息,ORC,stripe,row group级.用于在某些查询时指示是否可以跳过某段数据,或直接得出某些统计结果等

    ORC级  ORC文件的末尾记录,整个文件的列统计信息,

    stripe级  ORC文件还会记录,每个stripe的列统计信息. 

    row group级 ORC文件还会记录,每个行组的列统计信息.(行组的范围可以指定,默认10000)

  主要用于查询的优化.比如谓词a>4 && a<10时,当查询到ORC或者stripe或者行组的A列统计最小为11或者最大为3时就不会读入,将整个跳过该ORC或者stripe或者行组.  

5.数据读取方式

  ORC文件从末尾开始读取.文件的最后一个字节存储的Postscript长度.Postscript长度不会超过256个字节,Postscript存储的是整个文件的元数据信息.包括文件的压缩格式,每一个文件块的最大长度(读取时的内存分配),Foot长度,以及一些版本信息.

 

 

  参考资料 https://www.cnblogs.com/ITtangtang/p/7677912.html

[Hive]-列式存储篇

标签:文件的   阅读   strip   hive   种类型   位置   ado   不用   参考资料   

原文地址:https://www.cnblogs.com/NightPxy/p/9129499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!