Hive中NULL的含义

在Hive中,NULL表示的是异常,与null不同,文件中的null在Hive中被认为字符串,如果对应的字段类型是字符类的,如string,则将其视为一个普通的字符串,而对于数据类的,则若数据本身是null,则由于无法转换为数值,则会显示NULL。

此外,Hive无法实现对NULL数据的过滤。

Hive为读时模式,其在读取时将存储的实际值转化为schema中定义的数据类型,当转换失败时对应值显示为NULL。那么考虑是否可以通过在where子句中对NULL值过滤呢,经过验证答案是否定的,基本可以这么认为,对于读取时无法正确转换的值(select时显示为NULL)的值,是不会参与where字句的运算的。


场景描述

如下所示,在Hive中表中内容以及相应的文件内容如下所示:



各字段类型在字段名称中体现,可以看出,对于char类型将空视作普通的字符展示,对于timestamp类型为空的,则由于不能正常转换,则显示为NULL,同理boolean类型的亦是如此。

验证步骤

Ø  以boolean类型的为例,可以在where子句中过滤掉true和/或false的,查看是否可以省下NULL的:




可以看出NUUL行的并未参与where过滤。

Ø  以timestamp为例,我们知道后台是缺失值的,那么是否可以筛选出来呢?

可以看出是无法过滤得到的。

Ø  但char对于空的值是可以过滤得到的,如下所示:





猜你喜欢

转载自blog.csdn.net/wiborgite/article/details/80752100