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;
输出
如何在 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;
输出