今天在hive数据库当中查询一张表,查询数据为空的值,但是死活就是匹配不到:
查询语句如下:
select * from loan_repayment_detail where trim(fact_return_date) is null
本来想着是不是因为前面有空格的原因,但是去掉了空格之后还是不可以。
我直接插寻这个字段是有值的啊,也是为null,为啥就不可以啊。原来真正的问题的源头是从我们使用sqoop导入数据开始的。在sqoop导入数据的时候如果不对null做处理,他会将原来为null的值导入的时候
转化为null的字符串,不是真正意义上面的null值。所以当我们使用is null 的时候就匹配不到数据。这才是问题的关键:
然后我执行了一下下面这个语句就可以了:
所以我们在通过sqoop导入数据的时候,需要加上
--null-string '\N'
--null-non-string '\N'
这个是因为在hive里面的,null值是用N来表示的,所以需要将原理啊的null的字符串进行转换之后,才能匹配到真正意义上的null值,而不是字符串类型的null值。
至此问题得到了解决。