Hive踩过的坑-Hive空值、NULL判断 發布於 1 年前 (2018年11月02日) – 6196 次检阅

最近经常在Hive上跑oralce 语句,虽然Hive执行语句大致相同,可是也有一些大坑..比如就是空值和null判断

在oralce 判断是否为空直接可以 xxx is null / xxx is not null;

而在Hive上是这种方式是不对的。得到的结果一定是错的。

hive中空值判断基本分两种

1.NULL 与 N(当字段为NULL时,hdfs文件用N表示)

Hive在底层数据中如何保存和标识NULL,是由 alter table xxx(数据表名) set serdeproperties('serialization.null.format' = 'N'); 参数控制的

比如:当字段=''时,存储为null,可利用命令

alter table xxx(数据表名) set serdeproperties('serialization.null.format' = '');

实现遇到''用null替换

2.'' 与 length(xx)=0

''表示的是字段内容不为null且为空字符串,此时用 xxx is null 是无法查询这种值的,必须通过 xxx='' 或者 length(a)=0 查询 ,所以这里就是坑了,当内容为空是,用 xxx is null 是没有用哒

然后解决了这个问题之后呢,也会出现hive上面是显示null,而把数据导出后变成N

我自己的做法是把他做nvl操作,显示为''这样oracle的话也是为null/空….(前提是字段比较少,如果字段比较多的话,还是修改底层数据的保存标识吧)