hive 中空值判断基本分两种
NULL 与 \N
hive在底层数据中如何保存和标识NULL,是由 SET SERDEPROPERTIES(‘serialization.null.format’ = ‘\N’); 参数控制的。比如:
1.设置 alter table name SET SERDEPROPERTIES(‘serialization.null.format’ = ‘\N’); 则:底层数据保存的是’\N’,通过查询显示的是’NULL’,这时如果查询为空值的字段可通过 语句:a is null 或者 a=’\N’
2.设置 alter tablename SET SERDEPROPERTIES(‘serialization.null.format’ = ‘NULL’); 则:底层数据保存的是’NULL’,通过查询显示的是’NULL’,这时如果查询为空值的字段可通过 语句:a is null 或者 a=’NULL’。
所以呢,如果我们不知道底层使用说明来标识 NULL 的话,使用 a is null 最保险了。
**
‘’ 与 length(xx)=0
如果设置 alter tablename SET SERDEPROPERTIES(‘serialization.null.format’ = ‘’); 则:底层数据保存的是’’,通过查询显示的是’NULL’,’’ 与 length(xx)=0。
但要注意的是,’’ 表示的是字段不为null且为空字符串,此时用 a is null 是无法查询这种值的,必须通过 a=’’ 或者 length(a)=0 查询
函数
CASE
case 是条件函数,case when … then … else … end
NVL
语法: NVL(exp1,exp2) ,只能接受两个参数,是非空查找函数 返回参数中第一个非控制
COALESCE
语法: COALESCE(T v1, T v2, …),美其名曰非空查找函数 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
NULLIF函数
语法:NULLIF(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(NULL),否则返回第一个值。