Apache Pig - 空检查 case 语句

Apache Pig - Null check in case statement

如何在 case 语句中测试 null?

case foo    
      when null then 'something'
      when 'S' then '1'
      when 'W' then '2'
      ...
      else '3'
end

这总是 returns null,无论字段中有什么。 When is null returns 一个错误。

我是不是做错了什么?我是否必须组合一些糟糕的嵌套 bincond 测试?

我不认为你可以在 statement.Instead 的情况下检查空值,你可以使用 bincond 运算符首先检查空值,然后使用 case 语句检查其余的 'foo' 值

假设 A 只有一个字段在几行中有空值

B = FOREACH A GENERATE (foo is null ? 'something' : (case foo    
      when 'S' then '1'
      when 'W' then '2'
      ...
      else '3'
end)); 

例子

1   1
2   1
3   1
4   2

Script - 生成一些用于测试的空值并替换为 'SOMETHING'

A = LOAD '/test20.txt' AS (f1:int,f2:int);
B = FOREACH A GENERATE [=12=];
C = FOREACH A GENERATE ;
D = JOIN B BY [=12=] LEFT OUTER,C BY [=12=];
E = FOREACH D GENERATE [=12=], ( is null ? 'SOMETHING' : (case  
                  when 1 then 'One'
                  when 2 then 'Two'
                  when 3 then 'Three'
                  when 4 then 'Four'
                  else 'UNKNOWN'
                  end));

 DUMP E;

输出