HIVE哪里不存在不比较NULLS

问题描述:

我想只选择其中一些列值不同的行。我的问题是,如果我使用=,它不会比较具有空值的列,并且如果我用Like替换=,我会得到以下错误,任何建议?两个表具有相同的列HIVE哪里不存在不比较NULLS

不支持的子查询表达式子查询表达式引用父表达式和子查询表达式,并且不是有效的连接条件。 (状态= 42000,代码= 10249)

SELECT * 
FROM table1 t 
where not exists(
select * from table2 l where t.loco_id=l.loco_id and 
t.a=l.a and 
t.b=l.b 
); 
+0

**(1)**添加包括所需的结果的数据样品**(2)**哪个列可能是NULL?一个? B' loco_id?他们全部?他们中有一些? –

null在技术上是指其unknown

=不比较unknown -s;因为它不可能给他们比较......两个unknowns的对比结果是unknown

select assert_true((null = null) is null ) 

但是:

select assert_true((null = null)) 

会失败,因为结果是unknown(空)。

如果你仍然想通过使用null -s;我建议添加一些​​3210 -s来摆脱这些unknown-S。

select t.* 

from    table1 t 

     left join table2 l 

     on   t.loco_id <=> l.loco_id 
       and t.a   <=> l.a 
       and t.b   <=> l.b 

where l.loco_id is null 
; 

甲< =>乙
返回相同的结果用等号(=)操作者对非空 操作数,但如果两者都为NULL返回TRUE,FALSE,如果他们 中的一个是空值。 (作为一种检测0.9.0版本)。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-RelationalOperators