2015-09-09 40 views
5

Hive utilizza IF (condizione, espressione, espressione), in modo che quando voglio fare if/else if/else if/else, che devo fare:Qual è il modo migliore per scrivere se/else se/else se/else in HIVE?

IF(a, 1, IF(b, 2, IF(c, 3, 4))) 

Esiste un modo migliore per fare questo che è più leggibile?

ricerca di qualcosa di simile allo standard

if (a) { 
    1 
} else if (b) { 
    2 
} else if (c) { 
    3 
} else { 
    4 
} 

risposta

22

È possibile utilizzare Hive condizionale funzione CASE WHEN per lo scenario if-else. Lo CASE Statement fornirà una migliore leggibilità con la stessa funzionalità.

CASE 
    WHEN (condition1) THEN result1 
    WHEN (condition2) THEN result2 
    WHEN (condition3) THEN result3 
    WHEN (condition4) THEN result4 
    ELSE result_default 
END AS attribute_name 
+1

necessario un cambio estetico, c'è un extra ')' dopo l'END – venkata

0

Il modo migliore per gestire se altro sarà scrivere, personalizzare UDF per colonna particolare.

+0

IDK come funziona? Se abbiamo già delle funzioni, allora meglio usarlo. – ChikuMiku

+0

Vorrei compromettere la leggibilità del codice per velocizzare l'esecuzione. In genere l'UDF ha oltrepassato i confini: dall'alveare al programma udf. Se possibile in Hive cerca di realizzarlo nelle funzioni Hive – viru