多 if else 使用问号
Multi-if else using question mark
我需要根据 CD_AXE_MCH
在猪中的值来评估 CD_MARCHE
。我应该只使用下面的问号选项:
(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,
但是这个return这个错误
mismatched input '?' expecting RIGHT_PAREN
请问如何解决?
在这种情况下,使用 CASE
语句更容易。 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
如果不是 feasible/supported,请确保正确放置括号。
(CD_AXE_MCH MATCHES 'PLIB|ATPE|COMM' ? 'P' : (CD_AXE_MCH == 'PME' ? 'E' : (CD_AXE_MCH == 'AGRI' ? 'A' : (etc.))))
我需要根据 CD_AXE_MCH
在猪中的值来评估 CD_MARCHE
。我应该只使用下面的问号选项:
(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,
但是这个return这个错误
mismatched input '?' expecting RIGHT_PAREN
请问如何解决?
在这种情况下,使用 CASE
语句更容易。 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
如果不是 feasible/supported,请确保正确放置括号。
(CD_AXE_MCH MATCHES 'PLIB|ATPE|COMM' ? 'P' : (CD_AXE_MCH == 'PME' ? 'E' : (CD_AXE_MCH == 'AGRI' ? 'A' : (etc.))))