SA2018
SA2018

Reputation: 367

Multi-if else using question mark

I need to evaluate the CD_MARCHE according to CD_AXE_MCH 's values in pig. I should only use the question mark option as bellow:

 (CD_AXE_MCH IN ('PLIB','ATPE','COMM') ? 'P': (CD_AXE_MCH == 'PME') ?
 'E': (CD_AXE_MCH == 'AGRI') ? 'A': (CD_AXE_MCH == 'OBNL') ?
 'O':(CD_AXE_MCH == 'COLL') ? 'C' :(CD_AXE_MCH == 'EFIN') ? 
'B' :'X') AS CD_MARCHE,

But this return this error

mismatched input '?' expecting RIGHT_PAREN

How can I resolve it please ?

Upvotes: 0

Views: 38

Answers (1)

Bart Schuijt
Bart Schuijt

Reputation: 625

In this scenario it's easier to use a CASE statement. Available from Pig version 0.11+.

CASE
WHEN CD_AXE_MCH MATCHES 'PLIB|ATPE|COMM' THEN 'P'
WHEN CD_AXE_MCH == 'PME' THEN 'E'
WHEN CD_AXE_MCH == 'AGRI' THEN 'A'
WHEN CD_AXE_MCH == 'OBNL' THEN 'O'
WHEN CD_AXE_MCH == 'COLL' THEN 'C'
WHEN CD_AXE_MCH == 'EFIN' THEN 'B'
ELSE 'B'
END CD_MARCHE

If that's not feasible/supported, make sure to place the parentheses correctly.

(CD_AXE_MCH MATCHES 'PLIB|ATPE|COMM' ? 'P' : (CD_AXE_MCH == 'PME' ? 'E' : (CD_AXE_MCH == 'AGRI' ? 'A' : (etc.))))

Upvotes: 1

Related Questions