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)不同数据类型对空值的存储规则
-
int
与string
类型数据存储,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
对开发来说不好操作,可能不同地方代表意义不同,而且转码可能也会有问题,所有用''
代替。
备注
参考资料