条件函数¶
Hive 提供了很多条件函数,主要有 IF
、ISNULL
、ISNOTNULL
、NVL
、COALESCE
、NULLIF
、CASE...WHEN
以及 ASSERT_TRUE
,合理地使用这些函数不仅能帮我们处理非常复杂的逻辑,还能简化我们的 SQL 代码。
这里我们准备一个表,用于帮助大家更深入地理解条件函数的使用场景:
c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|
NULL | 2 | NULL | NULL | 10 |
3 | NULL | 4 | NULL | NULL |
NULL | NULL | 5 | 6 | NULL |
1. IF¶
2. ISNULL¶
3. ISNOTNULL¶
4. NVL¶
NVL
是一个空值处理函数,如果 value
值为空时返回 default_value
(不管默认值是不是空值),否则返回 value
。
下面我们看几个简单的示例:
为了更深入了解 NVL
的作用,我们看一个使用上面 example
的表:
可以理解为缺失值填充
5. COALESCE¶
COALESCE
是一个空值处理函数,它可以接收多个表达式,返回结果为第一个非空表达式,如果都为空值,那么返回结果为空。
COALESCE 简单示例 | |
---|---|
小结
可以看到,相较于 NVL
函数,COALESCE
其实更强大,也推荐大家使用这个函数。
6. NULLIF¶
7. CASE...WHEN¶
CASE...WHEN
可以说分析中用的最常用的语句了,但实际上它也有使用语法,下面我们来介绍一下。
7.1 CASE WHEN¶
最常用的就是使用 CASE WHEN
来处理一列或者多列字段值:
CASE WHEN 示例
7.2 CASE a WHEN¶
实际上如果只是处理单列字段,我们可以还有一个更简单的写法,相当于 C 语言中的 switch
语句:
NVL使用案例
注意事项
这种处理单列字段的写法,更适合于对于枚举值的分类,如果字段值涉及一定的逻辑处理,那么这样写显然就不太合适,需要使用 CASE a WHEN
这样的写法。
8. ASSERT_TRUE¶
9. 参考资料¶
- LanguageManual UDF: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-ConditionalFunctions
- Hive中NVL和COLESCE的使用: https://www.cnblogs.com/wdh01/p/15843859.html