列式存储和行式存储
5.png上图左边为逻辑表,右边第一个为行式存储,第二个为列式存储。
** 行存储的特点: **查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
** 列存储的特点: **因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
Hive中常用的存储格式
- textfile
textfile为默认格式,存储方式为行存储。 -
ORCFile
hive/spark都支持这种存储格式,它存储的方式是采用数据按照行分块,每个块按照列存储,其中每个块都存储有一个索引。特点是数据压缩率非常高。
6.png - Parquet
Parquet也是一种行式存储,同时具有很好的压缩性能;同时可以减少大量的表扫描和反序列化的时间。
根据不同的格式创建表
- textfile
创建表
create table textfile(
...
...
...
)
row format delimited fields terminated by '\t'
stored as textfile;
insert into table textfile select * from source_log;
查看占用的磁盘空间
7.png
- orc
创建表
create table orc(
...
...
...
)
row format delimited fields terminated by '\t'
stored as orc;
insert into table orc select * from source_log;
查看占用的磁盘空间
8.png
- parquet
创建表
create table parquet(
...
...
...
)
row format delimited fields terminated by '\t'
stored as parquet;
insert into table parquet select * from source_log;
查看占用的磁盘空间
9.png
磁盘空间占用大小比较
orc(7.8M)<parquet(38.2M)<textfile(53.3M)
查询语句的比较
- textfile表
hive (count_log)> select id from textfile limit 30;
10.png - orc表
hive (count_log)> select id from orc limit 30;
11.png - parquet表
hive (count_log)> select id from parquet limit 30;
把设置存储格式和压缩结合使用,可以最大的减少存储空间。
网友评论
Parquet是列式存储!