HIVE高级-格式存储

一、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

猜你喜欢

转载自blog.csdn.net/weixin_33908217/article/details/87239923