当使用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