当值为 NULL 时,Apache Pig 不尊重 ELSE 语句
Posted
技术标签:
【中文标题】当值为 NULL 时,Apache Pig 不尊重 ELSE 语句【英文标题】:Apache Pig doesn't respect ELSE statement when value is NULL 【发布时间】: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 的检查,但它在脚本中增加了很多臃肿。
【问题讨论】:
【参考方案1】:不幸的是,这是设计使然,是的。在 Pig 中,几乎每个处理 NULL 的表达式都会导致 NULL,因此您应该始终在代码中检查这些值。在the official documentation 中有一个关于 NULL 会发生什么的列表。
算术运算符:如果任一子表达式为空,则结果表达式为空。
、-、*、/ % 模数 ? : bincond 案例:案例
最好的解决方法就是您所说的,使用is null
和is not null
运算符检查NULL。当存在许多空值的可能性时,您会生成凌乱的代码行,但不幸的是目前没有其他解决方案。
【讨论】:
以上是关于当值为 NULL 时,Apache Pig 不尊重 ELSE 语句的主要内容,如果未能解决你的问题,请参考以下文章