【云计算】hive:null和'','NULL'的区别
小标 2018-12-05 来源 : 阅读 1347 评论 0

摘要:本文主要向大家介绍了【云计算】hive:null和'','NULL'的区别,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】hive:null和'','NULL'的区别,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。


说下hive中的null

employee表


hive>desc employee;
empid string
deptid string
salary string


查询employee


hive>select * from employee
1 NULL NULL


hive 中null实际在HDFS中默认存储为'\N'

即employee中的数据在HDFS中为

1 \N \N


验证,插入'\N'


hive>insert into table employee select '2','\\N','\\N' from employee limit 1;




其中多一个斜杠是转义的作用


查询employee


hive>select * from employee
1 NULL NULL
2 NULL NULL


此时hive中与null有关的函数,如nvl,coalesce,is null等判断是否为null是为true


hive>select nvl(empid,'A'),nvl(deptid,'B'),nvl(salary,'C') from employee
1 B C
2 B C


扩展:


NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。


NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。


---------------------


但是null或NULL和''会被hive当做字符串处理。


hive>insert into table employee select '3','','' from employee limit 1;




查询:


hive>select * from employee;
1 NULL NULL
2 NULL NULL


-------------------------


hive>insert into table employee select '4','null','NULL' from employee limit 1;




查询


hive>select * from employee;
1 NULL NULL
2 NULL NULL

4 null NULL


注意:1,2同一行的NULL与4行的NULL或null不一样。4行的NULL或null为字符串


---------------------------


此时hive中与null有关的函数,如nvl,coalesce,is null等判断''和null(字符串)或NULL(字符串)是否为null是为false


hive> select empid ,nvl(deptid,'E'),nvl(salary,'F') from employee;
1 E F
2 E F

4 null NULL


hive>select * from employee where deptid='';


hive>select * from employee where deptid='null' and salary ='NULL';
4 null NULL


hive>select * from employee where deptid is null;
1 NULL NULL
2 NULL NULL


可以通过


ALTER TABLE table_name SET SERDEPROPERTIES('serialization.null.format' = 定义描述符);




修改空值描述符

如果将''定义为NULL


ALTER TABLE employee SET SERDEPROPERTIES('serialization.null.format' = '');


查询employee


hive>select * from employee;
1 \N \N
2 \N \N
3 NULL NULL
4 null NULL


和前面的select比较发现''变成了NULL,而\N露出了真面目,4行的NULL或null为字符串没变化


验证,将''插入到emloyee


hive> insert into table employee select '5','','' from employee limit 1;


查询


hive>select * from employee;
1 \N \N
2 \N \N
3 NULL NULL
4 null NULL
5 NULL NULL


注意:3,5同一行的NULL与4行的NULL或null不一样。4行的NULL或null为字符串


此时HDFS中如此存储


1 \N \N
2 \N \N

4 null NULL


此时


hive> select empid ,nvl(deptid,'E'),nvl(salary,'F') from employee;


1 \N \N
2 \N \N
3 E F
4 null NULL
5 E F


总结:


hive中null的定义的意义在于:


oracle数据导出后原表中的null会变成'',然后导入到hive中也变成了''。


但是hive中关于NULL的一些函数如nvl,coalesce和is null却无法使用,因为hive默认\N才代表NULL。


在hive中通过

ALTER TABLE SET SERDEPROPERTIES('serialization.null.format' = '');


修改''代表NULL,改造存储过程中就不需要改nvl等语句。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved