18

Hive uses IF(condition, expression, expression), so when I want to do if / else if / else if / else, I have to do:

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

Is there a better way to do this that's more readable?

Looking for something similar to the standard

if (a) {
  1
} else if (b) {
  2
} else if (c) {
  3
} else {
  4
}
Popcorn
  • 5,188
  • 12
  • 54
  • 87

3 Answers3

48

You can use Hive Conditional CASE WHEN function for if-else scenario. The CASE Statement will provide you better readability with the same functionality.

CASE
  WHEN (condition1) THEN result1
  WHEN (condition2) THEN result2
  WHEN (condition3) THEN result3 
  WHEN (condition4) THEN result4
  ELSE result_default 
END AS attribute_name
YoungHobbit
  • 13,254
  • 9
  • 50
  • 73
3

You can easily achieve this using CASE WHEN statements.

CASE 
    WHEN a THEN 1
    WHEN b THEN 2
    WHEN c THEN 3
    ELSE 4
END AS attribute_name

For more information, refer official doc at https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-ConditionalFunctions

Piyush Patel
  • 1,646
  • 1
  • 14
  • 26
0

The best way to handle if else will be to write customize UDF for particular column.

ronil
  • 35
  • 5
  • IDK how this would work? If we have functions already then better to use it. – ChikuMiku Jul 23 '17 at 04:41
  • 1
    I would compromise code readability to speed of execution. UDF typically crossed boundaries - out of hive to udf program. If possible in Hive try to accomplish it in Hive functions – viru Sep 29 '17 at 19:12