Hive 记null带来的坑
作者:互联网
在hive或者impala中,null值表示这个字段值为空值(没有值),一般情况下我们把数据从原始系统抽取到数仓ODS层的时候,都要做空值处理,比方说用nvl()函数把空值置为0或者空字符串等等,如果不处理,后续可能给开发带来坑。下面以一个具体的例子说明笔者在开发的时候,由于疏忽大意,没对空值进行处理,导致的问题。
具体就是null值在和任何值作比较的时候,都认为不成立。
比方说,有个student表,有个字段为选修科目,为string类型,正常情况,有些学生,有选修课,有些学生没有选选修课,所有这个字段存在null值。
现在我们要把选修课不是为管理学的数据筛选出来。
笔者的第一反应就是
select * from student where subject !='管理学';
或者
select * from student where subject not in ('管理学')
这种情况查询出来的结果会把选修科目不是管理学的数据筛选掉,比方说选修科目为'天体物理',
但是同时也会把选修科目为NULL的数据筛选掉。原因是因为NULL值和任何值比较时默认认为不成立。
但是我们的本意是要保留这一部分数据的。
所以显然这种查询出来的结果是错的,这个时候我们就要对NULL值做特殊处理,比方说全部置为空字符串。或者置为0
标签:选修科目,选修课,管理学,Hive,空值,带来,比方说,null 来源: https://www.cnblogs.com/itachilearner/p/13931686.html