今天在做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 = ' 01'
(此处01为null值的八进制ASCII码,头一个0代表8进制。此表示方法来源于java的char类型,因为hive也是用java编写的。)