2016-11-07 4 views
1

Как проверить значение null в case case?Apache Pig - Null check in case statement

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

Не знаете, почему кто-то занижен. Это определенно правильный вопрос. –

ответ

2

Я не думаю, что вы можете проверить на нуль в случае statement.Instead, вы можете использовать bincond оператору первую проверку на нулевое значение, а затем использовать случай заявление для остальной части «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 - Создание некоторых аннулирует для тестирования и заменить 'НЕЧТО'

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