文章目录
Hive系列文章
Hive系列 (八):Hive中的explode 与 lateral view
基本概念
行存储
常见的关系型数据库都是行式存储的, 在我们查询的条件需要得到大多数列的时候, 相对列式格式, 查询效率更高. Hive默认的Text就是行式存储的。
特点:
查询满足条件的一整行数据的时候,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。而列存储则需要去每个聚集的字段找到对应的每个列的值。
列存储
列式存储, 它存储的方式是采用数据按照行分块,每个块按照列存储。
特点:
- 对于查询内容之外的列, 不必执行I/O和解压操作
- 适合仅访问小部分列的查询. 如果查询的列很多, 则行存储格式更为适合
- 列压缩的效率会更高, 尤其是列中取值不多的时候
- 数据仓库中经常会有在非常大的数据集上对某些列进行聚合的需求, 列式格式非常符合这种场景的需要
分片
MapReduce在读取数据的时候需要并行, 这就要求压缩后的文件可以分片读取. 分片对于MapReduce任务来说非常重要。
Hive存储格式
hive表常用的存储格式主要包括:orc、parquet、textfile、sqeuencefile几种,存储格式一般会选择综合性能最好的orc或者parquet,这两种都是列式存储格式。
压缩格式一般会选择snappy、lzo、gizp,针对不同的应用场景使用不同的压缩方式。
相较于行式存储,列式存储在分析中有以下有点:
- 分析场景中往往需要读大量行但是少数几个列。在列存模式下,只需要读取参与计算的列即可,极大的减低了IO开销,加速了查询。
- 同一列中的数据属于同一类型,压缩效果显著。
- 更高的压缩比意味着更小的数据空间,从磁盘中读取相应数据耗时更短。
- 自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。
Hive存储格式对比
TextFile
Hive的默认格式,存储方式为行存储。
创建表,存储数据格式为TextFile。脚本如下
# 文件名dict_text.sql
create table myhive.dict_text
(dict_code string,
item_code string,
serial string,
item_name string,
item_desc string,
src_sys_code string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
# 执行脚本
[hadoop@master sql_script]$ hive -f dict_text.sql
SLF4J: Class path contains multiple SLF4J bindings.
Hive Session ID = 6495bb2e-4797

本文介绍了Hive数据存储的基本概念,包括行存储、列存储和分片。重点讨论了Hive的存储格式,如TextFile、ORCFile和Parquet,以及它们在查询速度和压缩效率上的差异。同时,文章还探讨了各种压缩算法,如Snappy、LZO和Gzip,强调了列式存储在大数据分析中的优势。
最低0.47元/天 解锁文章
795

被折叠的 条评论
为什么被折叠?



