在关系X中只有1行
X.A=null
X.B= "blahblah"
现在我想做:
Y = FILTER X BY A != B ;
我打算说由于A为空且B不为,因此条件应该为真。 但实际结果是Y为空,条件评估为假。
这与SQL相同,其中涉及null的任何条件都为false。而SQL可以翻译 使用NVL()函数null,PIG似乎没有那个,有没有一种干净的方法来进行上述比较?
答案 0 :(得分:2)
这有点像黑客,但您可以进行比较并将结果存储在您的关系中,然后使用结果和原始比较进行过滤。
Y = foreach X generate *,
(((A is null and B is not null) or (A is not null and B is null) ? 'y' : 'n') as oneNull;
Y = filter Y by (oneNull == 'y' or A != B);
Y = foreach Y generate A, B;
使用它,如果X是:
(,blahblah)
(blah,blah)
(,)
(blah,)
(abc,def)
那么Y将是:
(,blahblah)
(blah,)
(abc,def)
答案 1 :(得分:0)
我安装了猪版0.12.1;它实际上适合我直接写条件:
Y = filter X by (A is null and B is not null) or (A is not null and B is null) or A != B;
请注意,对于null / null情况,表达式A!= B的计算结果为null,因此根据
,过滤器会排除元组。