Hive对于Null值的储存处理(什么where COL_NAME is null不起作用)

今天在做hive查询时,居然发现select count(*) where url is null;居然一条记录都找不出来,换成select count(*) where url = null;也没有用,但是我刚导入hive的表格中明明好大量行的url值都是空的!

仔细研究了一番(主要就是使用insert语句故意插入null值,然后再到HDFS上去下载表格的文本文件来看),发觉Hive并不像传统的关系型数据库一样,把空值 "" 作为null,而是用"\N"来代表NULL值!

就算你在load data前,故意将原始的文本文件中的空置位置插入ASCII code为00的特殊字符NULL,如下图所示,Hive也不会将这个真正的NULL值识别为NULL。

所以如果你要查询空置的话,请使用where COL_NAME = ''

如果要查询真正的NULL值,请使用where COL_NAME = '\001'

(此处01为null值的八进制ASCII码,头一个0代表8进制。此表示方法来源于java的char类型,因为hive也是用java编写的。)

posted on 2017-08-25 23:41  hejing195  阅读(719)  评论(0编辑  收藏  举报

导航