当我对配置单元表上的非空值执行select语句时,响应中没有正确的结果。结果就像“is not null”表达式不存在一样!
例子:
select count(*)
from test_table
where test_col_id1='12345' and test_col_id2 is not null;
注意 test_col_id1
以及 test_col_id2
不是分区键。
这是我的Hive版本。
Hive0.14.0.2.2.0.0-2041
这是table:
... | 测试|列id1 |测试|列id2 |
... | 12345 | x |
... | 12345 |空|
此查询返回2条记录。
2条答案
按热度按时间flvlnr441#
尝试以下查询,它是否返回行?
然后你的
NULL
不是NULL
,它是字符串“null”。很多人对Hive治疗有问题NULL
串。默认情况下,它是空白字符串。''
. 如果我们还需要其他任何东西,我们必须准确地指定在创建表时处理空字符串的方式。下面是3个例子,说明如何改变被认为是NULL
. 第一个将“null”字符串设置为NULL
:因为已经创建了表,所以可以更改表,以便它能够识别
'NULL'
作为NULL
:isr3a4wc2#
配置单元以不同的方式分析空值。
配置单元不认为空值为null。但是,默认情况下,hive使用
\N
表示null(不是特殊字符,只是反斜杠加大写字母n)。如果只想过滤掉所有空值,可以使用where test_col_id2 != ''
如果在加载到配置单元表中的原始文本文件中使用实际的空值,可以尝试where test_col_id2 != '\000'
因为八进制中null的ascii码是00,第一个“0”表示它是一个八进制数。顺便说一下,您还可以使用命令:
如果您希望配置单元将“”解析为某个表的空值,则可以将空值自定义为“”。