2015-06-15 6 views
0

При проверке значения в инструкции CASE в Apache Pig процедура ELSE игнорируется, когда одно из значений в состоянии равно NULL.Apache Pig не соблюдает инструкцию ELSE, когда значение равно NULL.

Таким образом, в приведенном ниже примере, когда А или В представляет собой значение NULL, то A_equals_B будет NULL, в выходных данных, а затем 0.

input = LOAD '/data/input.csv' USING PigStorage() AS (A:chararray, B:chararray); 
output = FOREACH input GENERATE 
    CASE 
     WHEN A == B THEN 1 
     ELSE 0 
    END AS A_equalsB; 

Это этот дизайн? Какая самая лучшая работа для этих проблем? Я добавляю проверки для NULL отдельно, но он добавляет много раздувания в скрипт.

ответ

0

К сожалению, это дизайн, да. В Pig почти каждое выражение, относящееся к NULL, приведет к NULL, поэтому вы всегда должны проверять эти значения в своем коде. Существует список того, что происходит с NULL в the official documentation.

Арифметические операторы: Если какой-либо подвыражение имеет нулевое значение, полученное выражение является нулевым.

  • , -, *,/
  • % по модулю
  • ? : Bincond
  • случай: случай

Лучшим решением является то, что вы сказали, проверяя значения NULL с is null и is not null операторов. Вы генерируете беспорядочные строки кода, когда существует вероятность появления множества нулевых значений, но, к сожалению, на данный момент другого решения нет.

Смежные вопросы