2016-11-07 8 views
1

caseステートメントでnullをテストするにはどうすればよいですか?Apache Pig - Null check in caseステートメント

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

これは、フィールドの内容にかかわらず常にnullを返します。 When is nullはエラーを返します。

何か間違っていますか?私はいくつかのひどいネストされたビンコンテストを組み立てなければならないのですか?

+0

に置き換えなぜdownvote、私は情報を追加する必要がありますか? – Andrew

+0

なぜ誰かがdownvoted.Itは間違いなく有効な質問 –

答えて

2

私はあなたがNULL値のための最初のチェックにbincond演算子を使用して、「foo」での残りのためのcase文を仮定し

値使用することができ、あなたはケースstatement.Insteadにnullをチェックすることができるとは思いません少数の行にNULL値を持つただ一つのフィールド

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; 

出力

enter image description here

+0

パーフェクト、ありがとう! – Andrew