一文读懂Hive底层数据存储格式
发布时间:2024-11-15 02:24:05点击:
本文讲解 Hive 的数据存储,是 Hive 操作数据的基础。选择一个合适的底层数据存储文件格式,即使在不改变当前 Hive SQL 的情况下,性能也能得到数量级的提升。这种优化方式对学过 MySQL 等关系型数据库的小伙伴并不陌生,选择不同的数据存储引擎,代表着不同的数据组织方式,对于数据库的表现会有不同的影响。
Hive 数据存储常用的格式如下:
注:RCFile 和 ORCFile 并不是纯粹的列式存储,它是先基于行对数据表进行分组(行组),然后对行组进行列式存储
我们看下这几种存储结构的优缺点:
行存储模式就是把一整行存在一起,包含所有的列,这是最常见的模式。这种结构能很好的适应动态的查询。
比如:select a from tableA 和 select a, b, c, d, e, f, g from tableA这样两个查询其实查询的开销差不多,都需要把所有的行读进来过一遍,拿出需要的列。
而且这种情况下,属于同一行的数据都在同一个 HDFS块上,重建一行数据的成本比较低。
但是这样做有两个主要的弱点:
垂直的列存储结构:
列存储是将每列单独存储或者将某几个列作为列组存在一起。列存储在执行查询时可以避免读取不必要的列。而且一般同列的数据类型一致,取值范围相对多列混合更小,在这种情况下压缩数据能达到比较高的压缩比。
但是这种结构在重建行时比较费劲,尤其当一行的多个列不在一个 HDFS 块上的时候。比如我们从第一个>
textfile_tableueserid STRINGmovieid STRINGrating STRINGts STRING formated delimated stored textfile