несоответствующий ввод ')', ожидающий END - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно создать объект DMS_EPRPFL, как показано этим сценарием pig:

DMS_EPRPFL = FOREACH ORDER_EPSE_ENEE_ENR  GENERATE

GROUP_EPSE_ENEE_ENR::IDT_GCP           AS    IDT_GCP,
GROUP_EPSE_ENEE_ENR::CD_FRM_JUR        AS    CD_FRM_JUR,
GROUP_EPSE_ENEE_ENR::DA_CRE_EPS        AS    DA_CRE_EPS,
GROUP_EPSE_ENEE_ENR::NO_SIREN           AS   NO_SIREN,
GROUP_EPSE_ENEE_ENR::CD_POST            AS   CD_POST,
GROUP_EPSE_ENEE_ENR::CD_OSCE_PAYS_FIS    AS  CD_OSCE_PAYS_FIS,
GROUP_EPSE_ENEE_ENR::CD_NAF              AS  CD_NAF,
GROUP_EPSE_ENEE_ENR::CD_NACE             AS  CD_NACE,
(CASE (GROUP_EPSE_ENEE_ENR::CD_AXE_MCH)
WHEN ('PLIB' OR 'ATPE' OR 'COMM') THEN 'P'
WHEN ('PME') THEN 'E'
WHEN ('AGRI') THEN 'A'
WHEN ('OBNL') THEN 'O'
WHEN ('COLL') THEN 'C'
WHEN ('EFIN') THEN 'B'
WHEN ('NONA' OR 'SCI') THEN 'X')               AS CD_MARCHE,
GROUP_EPSE_ENEE_ENR::CD_AXE_SNIV_MCH           AS CD_AXE_SNIV_MCH,
MIN(GROUP_EPSE_ENEE_ENR::A_PRM_CTR)            AS A_PRM_CTR,
MIN(GROUP_EPSE_ENEE_ENR::A_PRM_CAV)            AS A_PRM_CAV,
MIN(GROUP_EPSE_ENEE_ENR::A_PRPRE)              AS A_PRPRE,
GROUP_EPSE_ENEE_ENR::CD_NOT                    AS CD_NOT;

Проблема примерно в CD_MARCHE. На самом деле мне нужно сгенерировать его в соответствии с конкретными условиями и с помощью оператора case.

При выполнении скрипта у меня появляется эта ошибка:

несоответствующий ввод ')', ожидающий END

в этой строке

 WHEN ('NONA' OR 'SCI') THEN 'X')               AS CD_MARCHE,

Я не могу найти проблему там.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 31 мая 2019

С http://pig.apache.org/docs/latest/basic.html#arithmetic

CASE либо принимает

CASE expression [ WHEN value THEN value ]+ [ ELSE value ]? END

OR

CASE [ WHEN condition THEN value ]+ [ ELSE value ]? END

В вашем примере вы используете первое, но смешанное условие (A ИЛИ B), где оно принимает только значение. Требуются два изменения.

Добавьте «END» в конце вашего оператора case и используйте последний оператор CASE.

Переписать

(CASE (field)
    WHEN ( 'PLIB' OR 'ATPE' OR 'COMM' ) THEN 'P' 
    WHEN ('PME') THEN 'E'
    ...
    WHEN ('NONA' OR 'SCI') THEN 'X') AS CD_MARCHE,

до

(CASE 
    WHEN (field in ('PLIB','ATPE','COMM') ) THEN 'P' 
    WHEN (field == 'PME') THEN 'E'
    ...
    WHEN (field in ('NONA','SCI')) THEN 'X' END) AS CD_MARCHE,
...