在 HIVE 中写 if/else if/else if/else 的最佳方式是什么?
What's the best way to write if/else if/else if/else in HIVE?
Hive 使用 IF(condition, expression, expression),所以当我想做 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
}
您可以对 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
处理 if else 的最佳方法是为特定列编写自定义 UDF。
您可以使用 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
Hive 使用 IF(condition, expression, expression),所以当我想做 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
}
您可以对 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
处理 if else 的最佳方法是为特定列编写自定义 UDF。
您可以使用 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