hive中的数据默认存储格式为textfile格式
Hive支持的存储数据的格式主要有:TEXTFILE?、SEQUENCEFILE、ORC、PARQUET。
其中,textfile 和 SEQUENCEFILE 是行式存储,ORC 和 PARQUET 是列式存储
行式存储特点:
查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
列存储的特点
因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
使用textfile格式存储:
create table log_text(
track_time string,
url string,
session_id string,
referer string,
ip string,
city_id string
)
row format delimited fields terminated by '\t'
stored as textfile;
load data local inpath '/opt/module/datas/log.data' into table log_text;
dfs -du -h /hive/log_text/log.data;
使用orc格式存储:
create table log_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc;
insert into table log_orc
select track_time,url,session_id,referer,ip,city_id from log_text;
dfs -du -h /hive/log_orc/000000_0; 显示文件磁盘占用情况
使用PARQUET格式存储:
create table log_parquet(
track_time string,
url string,
session_id string,
referer string,
ip string,
city_id string
)
row format delimited fields terminated by '\t'
stored as parquet ;
insert into table log_parquet
select * from log_text;
dfs -du -h /hive/log_parquet/000000_0;
存储文件的压缩比总结:
ORC > Parquet > textFile > SEQUENCEFILE
create table log_seq(
track_time string,
url string,
session_id string,
referer string,
ip string,
city_id string
)
row format delimited fields terminated by '\t'
stored as SEQUENCEFILE;
insert into table log_seq
select * from log_text;
dfs -du -h /hive/log_seq/000000_0;