null列NOT IN字符串奇怪的结果列表



当使用spark SQL语句时,我得到奇怪的结果,如:

select * from mytab where somecol NOT IN ('ABC','DEF')

如果我将someecol设置为ABC,它将不返回任何东西。如果我将它设置为XXX,它将返回一行。

但是,如果我将列留空,例如,在CSV数据中(因此值被读取为null),它仍然不返回任何东西,即使null不在值列表中。

即使重写为NOT(someecol IN ('ABC','DEF')),情况仍然如此。

我觉得这是做null和字符串之间的比较,但我不确定如何处理空列值在in或not in子句中结束。

我需要先将它们转换为空字符串吗?

您可以在查询中显式检查null,因为null比较在spark details中返回未知

select * from mytab where somecol NOT IN ('ABC','DEF') or somecol is null