在HIVE中写if / else if / else if / else的最佳方法是什么?

时间:2015-09-09 06:57:06

标签: hive hql

Hive使用IF(条件,表达式,表达式),所以当我想要/ else if / else if / else时,我必须这样做:

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

有更好的方法可以做到更具可读性吗?

寻找类似于标准的东西

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

3 个答案:

答案 0 :(得分:32)

您可以对if-else方案使用 Hive 条件CASE WHEN函数。 CASE Statement将为您提供更好的可读性和相同的功能。

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 :(得分:0)

处理if else的最佳方法是为特定列编写自定义UDF。

答案 2 :(得分:0)

您可以使用CASE WHEN语句轻松实现这一目标。

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

有关更多信息,请参阅官方文档,网址为https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-ConditionalFunctions