hive中的NULL(hive空值处理)
2016-05-19 10:27
567 查看
HIVE表中默认将NULL存为\N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量\N, 这样造成浪费大量空间。而且用java、python直接进入路径操作源数据时,解析也要注意。 另外,hive表的源文件中,默认列分隔符为\001(SOH),行分隔符为\n(目前只支持\n,别的不能用,所以定义时不需要显示声明)。元素间分隔符\002,map中key和value的分隔符为\003。 举例,如源文件中一条记录为:
10000042SOH77SOH435SOH16SOH22SOH1156120000SOH\NSOH\NSOH\NSOH\NSOH\NSOH\NSOH\NSOHyoukuSOH85133.0SOH111
可以看出存储NULL的\N 浪费了大量空间。 但hive的NULL有时候是必须的: 1)hive中insert语句必须列数匹配,不支持不写入,没有值的列必须使用null占位。 2)hive表的数据文件中按分隔符区分各个列。空列会保存NULL(\n)来保留列位置。但外部表加载某些数据时如果列不够,如表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
相关文章推荐
- hive中的NULL(hive空值处理)
- iOS计算文字高度
- 淘宝FastJson使用
- Java数组的12个常用方法
- bigDecimal使用方法详解(转载)
- Linux Debian 上安装 JDK7
- c++中类中私有成员的调用?
- Java时间函数整理
- Spring 切入点配置
- oracle的clob字段不为空的判断
- 349. Intersection of Two Arrays[][
- 欢迎使用CSDN-markdown编辑器
- JS中的BOM和DOM
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- iOS开发-ios7下拉刷新,上提加载快速集成
- java获取10以内的两组不同随机数(摸牌)
- nginx配置静态文件服务器
- 让MySql支持Emoji表情存储
- Apue:daemon
- 关于appcompat_v7的问题