【问题标题】:Apache Pig doesn't respect ELSE statement when value is NULL当值为 NULL 时,Apache Pig 不尊重 ELSE 语句
【发布时间】:2015-06-15 09:28:20
【问题描述】:

在 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 的检查,但它在脚本中增加了很多臃肿。

【问题讨论】:

    标签: apache-pig


    【解决方案1】:

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

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

    • 、-、*、/
    • % 模数
    • ? : bincond
    • 案例:案例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2019-01-10
      • 2021-07-24
      • 1970-01-01
      • 2017-10-28
      相关资源
      最近更新 更多