一、file_format种类
TEXTFILE ---------- default
RCFILE ---------- Hive 0.6.0 and later
ORC ---------- Hive 0.11.0 and later
PARQUET ---------- Hive 0.13.0 and later
file_format配合压缩使用不仅能节省存储空间,还能提升执行效率
二、行式存储 vs 列式存储
行式存储的优点:
同一行数据存放在同一个block块里面,select * from table_name;数据能直接获取出来;
INSERT/UPDATE比较方便
行式存储的缺点:
不同类型数据存放在同一个block块里面,压缩性能不好;
select id,name from table_name;这种类型的列查询,所有数据都要读取,而不能跳过。
列式存储的优点:
同类型数据存放在同一个block块里面,压缩性能好;
任何列都能作为索引。
列式存储的缺点:
select * from table_name;这类全表查询,需要数据重组;
INSERT/UPDATE比较麻烦。
三、file_format详解
最后加stored as file_format
格式存储导入数据不能用load,因为创建后的表指定了存储格式肯定不是文本格式,本地数据格式为文本,两者不一致;所以需要用insert into table xxx select * from ruoze_page_views;
TEXTFILE:默认 文本格式 18.1M
SEQUENCEFILE: 二进制的,现在基本不用,结果会大于原始数据,好处有同步位在里面,查询时候是可以跳过一些不必要的东西 19.6
RCFILE : row group 混合行列,能保证同一行的所有列都在一个block上, 缺点row group 太小,仅有40M 17.9M
ORC:优化过后的rc strip 250M 包含index 、rowdata 、strip footer 2.8M 默认采用bzip 如果不采用压缩 7.7M
parquet:源于dremel 不压缩状态13.1M set parquet.compression = Gzip 3.9M
行式储存和列式储存读数据的对比:
select count(1) from ruoze_page_views where session_id='B58W48U4WKZCJ5D1T3Z9ZY88RU7QA7B1';
读取的文件数:19022752
orc:
select count(1) from ruoze_page_views_orc where session_id='B58W48U4WKZCJ5D1T3Z9ZY88RU7QA7B1';
读取的文件数:1257523
parquet:
查一列:
select count(1) from ruoze_page_views_parquet where session_id='B58W48U4WKZCJ5D1T3Z9ZY88RU7QA7B1';
读取的文件数:2687077
查两列:
select count(1) from ruoze_page_views_parquet where session_id='B58W48U4WKZCJ5D1T3Z9ZY88RU7QA7B1' and ip='1';
读取的文件数:3496487
网友评论