当值为NULL时,Apache Pig不遵守ELSE语句

时间:2015-06-15 09:28:20

标签: apache-pig

当检查Apache Pig中CASE语句中的值时,如果条件中的一个值为NULL,则忽略ELSE例程。

因此,在下面的示例中,当A或B为NULL值时,A_equals_B在输出中将为NULL,而不是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;

这是设计的吗?这些问题的最佳解决方案是什么?我分别添加了对NULL的检查,但它在脚本中增加了很多膨胀。

1 个答案:

答案 0 :(得分:0)

不幸的是,它是设计的,是的。在Pig中,几乎每个处理NULL的表达式都会产生NULL,因此您应该始终在代码中检查这些值。有the official documentation中的NULL发生的列表。

  

算术运算符:如果任一子表达式为null,则结果表达式为空。

     
      
  • , - ,*,/
  •   
  • %modulo
  •   
  • ? :bincond
  •   
  • 案例:案例
  •   

最好的解决方法就是你所说的,用is nullis not null运算符检查NULL。当存在许多空值的可能性时,您会生成混乱的代码行,但不幸的是,目前还没有其他解决方案。