• hive中的NULL(hive空值处理)


    HIVE表中默认将NULL存为N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量N,  
    这样造成浪费大量空间。而且用java、python直接进入路径操作源数据时,解析也要注意。
    
    另外,hive表的源文件中,默认列分隔符为01(SOH),行分隔符为
    (目前只支持
    ,别的不能用,所以定义时不需要显示声明)。元素间分隔符02,map中key和value的分隔符为03。
    
    举例,如源文件中一条记录为:
    
    10000042SOH77SOH435SOH16SOH22SOH1156120000SOHNSOHNSOHNSOHNSOHNSOHNSOHNSOHyoukuSOH85133.0SOH111
    可以看出存储NULL的N 浪费了大量空间。
    
    但hive的NULL有时候是必须的:
    1)hive中insert语句必须列数匹配,不支持不写入,没有值的列必须使用null占位。
    
    2)hive表的数据文件中按分隔符区分各个列。空列会保存NULL(
    )来保留列位置。但外部表加载某些数据时如果列不够,如表13列,文件数据只有2列,则在表查询时表中的末尾剩余列无数据对应,自动显示为NULL。
    
    所以,NULL转化为空字符串,可以节省磁盘空间,实现方法有几种
        1)建表时直接指定(两种方式)
            a、用语句
    ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’
        with serdeproperties('serialization.null.format' = '')
            实现,注意两者必须一起使用,如
    
       CREATE TABLE hive_tb (id int,name STRING)
       PARTITIONED BY ( `day` string,`type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint)
       ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe’
       WITH SERDEPROPERTIES (
            ‘field.delim’='/t’,
            ‘escape.delim’='//’,
            ‘serialization.null.format'=''
       ) STORED AS TEXTFILE;
            b、或者通过ROW FORMAT DELIMITED NULL DEFINED AS '' 如
    
       CREATE TABLE hive_tb (id int,name STRING)
       PARTITIONED BY ( `day` string,`type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint)
       ROW FORMAT DELIMITED 
            NULL DEFINED AS '' 
       STORED AS TEXTFILE;
        2)修改已存在的表
    
        alter table hive_tb set serdeproperties('serialization.null.format' = '');
    节省空间的验证结果如下:
        hadoop fs -du /hivedata/warehouse/pmp.db/hive_tb/day=2016-05-14/type=1/hour=00/0*
        1137
        hadoop fs -du /hivedata/warehouse/pmp.db/hive_tb/day=2016-05-14/type=1/hour=01/0*
        319753
        -----------------------------------
        hadoop fs -du /hivedata/warehouse/pmp.db/hive_tb/day=2016-05-14/type=1/hour=00/0*
        885
        hadoop fs -du /hivedata/warehouse/pmp.db/hive_tb/day=2016-05-14/type=1/hour=01/0*
        249529
    
  • 相关阅读:
    条款十四 在资源管理类中小心copying行为
    条款八 别让异常逃离析构函数
    条款五 了解C++默默的编写并调用的哪些函数
    volatile——C++关键字(转)
    C++ auto_ptr(转)
    条款十三 以对象管理资源
    优秀文章收集(更新中..)
    条款十一 在operator = 中处理"自我赋值"
    TCP协议疑难杂症全景解析(转)
    大四的迷茫
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205343.html
Copyright © 2020-2023  润新知