2016-11-07 3 views
1

Wie kann ich in einer case-Anweisung auf null testen?Apache Pig - Null Check-in-Fall-Anweisung

Dies gibt immer Null zurück, unabhängig davon, was im Feld ist. When is null gibt einen Fehler zurück.

Mache ich etwas falsch? Muss ich einen schrecklich verschachtelten bincond-Test zusammenstellen?

+0

Warum die downvote, kann ich Informationen hinzufügen müssen? – Andrew

+0

Nicht sicher, warum jemand abgelehnt. Es ist definitiv eine gültige Frage –

Antwort

2

Das glaube ich nicht, dass Sie für null bei statement.Instead überprüfen können, können Sie bincond Operator erste Prüfung auf Nullwert verwenden und dann für den Rest ‚foo‘ den Fall Anweisung Werte

A Unter der Annahme, hat nur ein Feld mit Nullwerten in wenigen Zeilen

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

Beispiel

1 1 
2 1 
3 1 
4 2 

Script - Generieren einige Nullen für die Prüfung und ersetzen mit 'etwas'

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; 

Ausgabe

enter image description here

+0

Perfekt, danke! – Andrew

Verwandte Themen