HIVE文件格式和压缩(附带翻译官方文档!)

对应官方文档:https://cwiki.apache.org/confluence/display/Hive/FileFormats
==1==>Parquet存储数据:
  Parquet文件格式简介:
    Parquet文件格式是Hadoop的生态系统范围的柱状格式(列存储!)


原文件大小:


  parquet 文件格式的使用:
    它的使用很简单,只要在建表的时候将文件类型处的参数从 该成 parquet 就行了,不好弄的是上传它对应的数据文件:
      CREATE Table IF NOT EXISTS db_yhd.track_log_parquet(
        id              STRING,
        url             STRING,
        referer         STRING,
        keyword         STRING,
        type            STRING,
        guid            STRING,
        pageId          STRING,
        moduleId        STRING,
        linkId          STRING,
        attachedInfo    STRING,
        sessionId       STRING,
        trackerU        STRING,
        trackerType     STRING,
        ip              STRING,
        trackerSrc      STRING,
        cookie          STRING,
        orderCode       STRING,
        trackTime       STRING,
        endUserId       STRING,
        firstLink       STRING,
        sessionViewNo   STRING,
        productId       STRING,
        curMerchantId   STRING,
        provinceId      STRING,
        cityId          STRING,
        fee             STRING,
        edmActivity     STRING,
        edmEmail        STRING,
        edmJobId        STRING,
        ieVersion       STRING,
        platform        STRING,
        internalKeyword STRING,
        resultSum       STRING,
        currentPage     STRING,
        linkPosition    STRING,
        buttonPosition  STRING
        )
        Partitioned by (date_str String,hour_str STRING)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
        STORED AS parquet #重点就是这个类型的选择!
  得到数据,想要得到它对应的数据类型的文件,还是有点繁琐的,需要通过查询TEXTFILE(文本文档)类型数据,将查询的数据按照字段添加!
        用INSERT语句将查询的结果添加到刚刚创建的表中!
        
        INSERT OVERWRITE TABLE db_yhd.track_log_parquet PARTITION (date_str="20150828", hour_str="18")IF NOT EXISTS 
        select
            id,
            url,
            referer,
            keyword,
            type,
            guid,
            pageId,
            moduleId,
            linkId,
            attachedInfo,
            sessionId,
            trackerU,
            trackerType,
            ip,trackerSrc,
            cookie,
            orderCode,
            trackTime,
            endUserId,
            firstLink,
            sessionViewNo,
            productId,
            curMerchantId,
            provinceId,
            cityId,
            fee,
            edmActivity,
            edmEmail,
            edmJobId,
            ieVersion,
            platform,
            internalKeyword,
            resultSum,
            currentPage,
            linkPosition,
            buttonPosition
        FROM
        db_yhd.track_log
        WHERE
        date_str="20150828" and hour_str="18";

文件大小:

 

 用db_yhd.track_log表相同的查询语句测试该文件格式是否使用成功!(结果相同则成功!)

        SELECT
            date_str,
            hour_str,
            count(url) as pv,
            count(distinct guid) as uv
        FROM
            db_yhd.track_log_parquet
        WHERE
            length(trim(url))>0 and date_str="20150828"
        GROUP BY
            date_str,hour_str

==2==>压缩格式:
    hive的压缩格式有:(snappy,LOZ,ZIP,GZIP等一些压缩格式)
    注意,不同的文件类型支持的牙压缩格式是太相同的,且不同的文件格式创建的表指定压缩格式的方式以不同!
==3==>parquet文件格式+snappy压缩:
    ->压缩文件是一个很好的减小磁盘压力的一个方法!再加上parquet文件格式也能很好的减小磁盘压力,两者结合就更加牛了!
        
    ->parquet文件格式所对应的表需要在创建表前设置它的压缩格式:
        set parquet.compression=压缩格式;
    ->创建snappy压缩+parquet文件格式的表:
     
   set parquet.compression=snappy;
        接下来表的创建方式就同普通的创建RCFile文件格式的表是相同的:
   
     CREATE Table IF NOT EXISTS db_yhd.track_log_parquet_snappy(
        id              STRING,
        url             STRING,
        referer         STRING,
        keyword         STRING,
        type            STRING,
        guid            STRING,
        pageId          STRING,
        moduleId        STRING,
        linkId          STRING,
        attachedInfo    STRING,
        sessionId       STRING,
        trackerU        STRING,
        trackerType     STRING,
        ip              STRING,
        trackerSrc      STRING,
        cookie          STRING,
        orderCode       STRING,
        trackTime       STRING,
        endUserId       STRING,
        firstLink       STRING,
        sessionViewNo   STRING,
        productId       STRING,
        curMerchantId   STRING,
        provinceId      STRING,
        cityId          STRING,
        fee             STRING,
        edmActivity     STRING,
        edmEmail        STRING,
        edmJobId        STRING,
        ieVersion       STRING,
        platform        STRING,
        internalKeyword STRING,
        resultSum       STRING,
        currentPage     STRING,
        linkPosition    STRING,
        buttonPosition  STRING
        )
        Partitioned by (date_str String,hour_str STRING)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
        STORED AS parquet
    ->查询原来的文本文件类型的表,将查询结果放到刚刚创建的表中:
        INSERT OVERWRITE TABLE db_yhd.track_log_parquet_snappy PARTITION (date_str="20150828", hour_str="18")IF NOT EXISTS 
        select
            id,
            url,
            referer,
            keyword,
            type,
            guid,
            pageId,
            moduleId,
            linkId,
            attachedInfo,
            sessionId,
            trackerU,
            trackerType,
            ip,trackerSrc,
            cookie,
            orderCode,
            trackTime,
            endUserId,
            firstLink,
            sessionViewNo,
            productId,
            curMerchantId,
            provinceId,
            cityId,
            fee,
            edmActivity,
            edmEmail,
            edmJobId,
            ieVersion,
            platform,
            internalKeyword,
            resultSum,
            currentPage,
            linkPosition,
            buttonPosition
        FROM
        db_yhd.track_log
        WHERE
        date_str="20150828" and hour_str="18";

文件大小:

   

 ->查询刚刚创建的表,查看结果是否相同:(相同就正确,不同就表示出错了!)

        SELECT
            date_str,
            hour_str,
            count(url) as pv,
            count(distinct guid) as uv
        FROM
            db_yhd.track_log_parquet_snappy
        WHERE
            length(trim(url))>0 and date_str="20150828"
        GROUP BY
            date_str,hour_str


==4==>ORC格式存储 + snappy压缩 

    ->与RCFile格式相比,ORC文件格式具有许多优点,例如:
        一个文件作为每个任务的输出,这减少了NameNode的负载
        Hive类型支持包括日期时间,小数点和复杂类型(结构,列表,映射和联合)
        存储在文件中的轻量级索引
        跳过不通过谓词过滤的行组
        寻求一个给定的行
        基于数据类型的块模式压缩
        整数列的运行长度编码
        字符串列的字典编码
        使用单独的RecordReaders并发读取同一文件
        无需扫描标记即可拆分文件
        限制了读或写所需的内存量
        使用Protocol Buffers存储的元数据,允许添加和删除字段
    
    ->ORC格式对应的压缩格式:
        默认:ZLIB  
        可设置: NONE(没有压缩格式!),ZLIB,SNAPPY


    ->ORC格式存储对应表的指定压缩方式:
        在创建表的同时加上:TBLPROPERTIES ("orc.compress"="压缩格式")
        
    ->创建ORC格式存储 + snappy压缩表:
        CREATE Table IF NOT EXISTS db_yhd.track_log_orc_snappy(
        id              STRING,
        url             STRING,
        referer         STRING,
        keyword         STRING,
        type            STRING,
        guid            STRING,
        pageId          STRING,
        moduleId        STRING,
        linkId          STRING,
        attachedInfo    STRING,
        sessionId       STRING,
        trackerU        STRING,
        trackerType     STRING,
        ip              STRING,
        trackerSrc      STRING,
        cookie          STRING,
        orderCode       STRING,
        trackTime       STRING,
        endUserId       STRING,
        firstLink       STRING,
        sessionViewNo   STRING,
        productId       STRING,
        curMerchantId   STRING,
        provinceId      STRING,
        cityId          STRING,
        fee             STRING,
        edmActivity     STRING,
        edmEmail        STRING,
        edmJobId        STRING,
        ieVersion       STRING,
        platform        STRING,
        internalKeyword STRING,
        resultSum       STRING,
        currentPage     STRING,
        linkPosition    STRING,
        buttonPosition  STRING
        )
        Partitioned by (date_str String,hour_str STRING)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
        STORED AS ORC
        TBLPROPERTIES ("orc.compress"="SNAPPY")  #重点在这里,指定压缩格式
    ->查询行数据类型表,将查询结果放到刚刚创建的表中
        INSERT OVERWRITE TABLE db_yhd.track_log_orc_snappy PARTITION (date_str="20150828", hour_str="18")IF NOT EXISTS 
        select
            id,
            url,
            referer,
            keyword,
            type,
            guid,
            pageId,
            moduleId,
            linkId,
            attachedInfo,
            sessionId,
            trackerU,
            trackerType,
            ip,trackerSrc,
            cookie,
            orderCode,
            trackTime,
            endUserId,
            firstLink,
            sessionViewNo,
            productId,
            curMerchantId,
            provinceId,
            cityId,
            fee,
            edmActivity,
            edmEmail,
            edmJobId,
            ieVersion,
            platform,
            internalKeyword,
            resultSum,
            currentPage,
            linkPosition,
            buttonPosition
        FROM
        db_yhd.track_log
        WHERE
        date_str="20150828" and hour_str="18";

数据大小:


    ->用行数据类型的表查询语句,查询刚刚创建的表!(结果相同则成功,否则失败!)
        SELECT
            date_str,
            hour_str,
            count(url) as pv,
            count(distinct guid) as uv
        FROM
            db_yhd.track_log_orc_snappy
        WHERE
            length(trim(url))>0 and date_str="20150828"
        GROUP BY
            date_str,hour_str

  

                                   


作者:唐平

时间:2018-7-2  

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
    
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值