如何在case语句中测试null?
case foo
when null then 'something'
when 'S' then '1'
when 'W' then '2'
...
else '3'
end
无论字段中是什么,它总是返回null。 When is null
会返回错误。
我做错了吗?我是否必须将一些可怕的嵌套二进制测试放在一起?
答案 0 :(得分:2)
我认为你不能在case语句中检查null。相反,你可以使用bincond运算符首先检查null值,然后将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
脚本 - 为测试生成一些空值并替换为'SOMETHING'
A = LOAD '/test20.txt' AS (f1:int,f2:int);
B = FOREACH A GENERATE $0;
C = FOREACH A GENERATE $1;
D = JOIN B BY $0 LEFT OUTER,C BY $0;
E = FOREACH D GENERATE $0, ($1 is null ? 'SOMETHING' : (case $1
when 1 then 'One'
when 2 then 'Two'
when 3 then 'Three'
when 4 then 'Four'
else 'UNKNOWN'
end));
DUMP E;
<强>输出强>