其他分享
首页 > 其他分享> > Hive 记null带来的坑

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