当value为null时,apachepig不尊重else语句

46qrfjad  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(267)

在apache pig中检查case语句中的值时,如果条件中的某个值为null,则忽略else例程。
所以在下面的例子中,如果a或b是空值,那么a_等于b在输出中将是空值,而不是0。

input = LOAD '/data/input.csv' USING PigStorage() AS (A:chararray, B:chararray);
output = FOREACH input GENERATE
    CASE
        WHEN A == B THEN 1
        ELSE 0
    END AS A_equalsB;

这是故意的吗?解决这些问题的最佳方法是什么?我分别为空值添加了检查,但是它在脚本中增加了很多膨胀。

g0czyy6m

g0czyy6m1#

不幸的是,这是设计的,是的。在pig中,几乎每个处理null的表达式都将导致null,因此您应该始终在代码中检查这些值。官方文档中有一个空值列表。
算术运算符:如果任一子表达式为空,则得到的表达式为空。
, -, *, /
%模
? : 宾康德
案例:案例
最好的解决方法就是你所说的,用 is null 以及 is not null 操作员。当存在许多空值的可能性时,会生成混乱的代码行,但不幸的是,目前没有其他解决方案。

相关问题