hive 空值判断

20190903


  • hive中空值判断基本分两种

一、NULL\N

hive在底层数据中如何保存和标识NULL,是由 serialization.null.format参数控制.

  • \N
alter table table_name SET SERDEPROPERTIES('serialization.null.format' = '\N');

设置 serialization.null.format' = '\N',则底层数据保存的是'\N',通过查询显示的是'NULL'

  • 查询语句
select * from table_name where column is null ;
select * from table_name where column = '\\N' ;
  • NULL
alter table table_name SET SERDEPROPERTIES('serialization.null.format' = 'NULL');

2.设置 serialization.null.format' = 'NULL', 则底层数据保存的是'NULL',通过查询显示的是'NULL'

  • 查询语句
select * from table_name where column is null ;
select * from table_name where column = 'NULL' ;

二、'' length(XX)=0

表示字段不为null且为空字符串,此时用 column is null 是无法查到这种值的,可通过以下语句查询

select * from table_name where column = '' ;
select * from table_name where length(column) = 0 ;

三、不同数据类型对空值的存储规则

(1)不同数据类型对空值的存储规则

  • intstring类型数据存储,null默认存储为 \N

  • string类型的数据如果为"",存储则是""

  • 另外往int类型的字段插入数据""时,结果还是\N

(2)不同数据类型,空值的查询

  • int可以使用is null来判断空;

  • string类型,条件is null 查出来的是\N的数据;而条件 = '',查询出来的是""(即空字符串)的数据。

  • 判断空时要根据实际的存储来进行判断。在开发过程中如果需要对空进行判断,一定得知道存储的是哪种数据。

  • Hive给出一种并非完美的解决方法——自定义底层用什么字符来表示NULL

alter table table_name SET SERDEPROPERTIES('serialization.null.format' = '');

这句话的意思是让null''等价,也就是让null不显示,因为null对开发来说不好操作,可能不同地方代表意义不同,而且转码可能也会有问题,所有用''代替。

备注

参考资料

hive 空值处理
hive中空值判断
hive中空值判断
SQL Server 帮助文档

posted on 2019-10-15 09:30  呼呼小睡  阅读(2797)  评论(0编辑  收藏  举报