点击上方「数据分析师的FIRE人生」→
点击右上角「...」→设为星标⭐

大家好,我是风影楼,一名互联网公司的数据分析师。之前我曾在CSDN编写了Hive系列的付费博客专栏,目前收获了25W次的访问,不过由于CSDN的付费设置无法取消,所以我决定在公众号重新免费分享一遍。这一篇主要介绍Hive中的条件函数。
1、 空值判断函数
1)nvl(T value, T default_value)
功能:如果value的值为NULL就返回default_value,如果不为null就返回value本身。value和default_value可以是任何数据类型的值,可以是多层其他函数嵌套的返回结果。(常用)
举例:
第一个参数为NULL就返回第二个参数hive (app)> select nvl (null,'hzy');hzy第一个参数不为NULL就返回第一个参数本身hive (app)> select nvl ('ytr','hzy');ytr
2)isnull( a )
功能:a可以为任意数据类型的值,如果a为null就返回true,否则返回false。(不常用)
举例:
hive (app)> select isnull(null);truehive (app)> select isnull(1);false
3)isnotnull ( a )
功能:功能与isnull相反,a可以为任意数据类型的值,如果a不为null就返回true,否则返回false。(不常用)
举例:
hive (app)> select isnotnull (null);falsehive (app)> select isnotnull (1);true
4)coalesce(T v1, T v2, ...)
功能:返回参数中第一个不是null的值,如果全部都为NULL就返回NULL,可以传任意个参数。(不常用)
举例:
hive (app)> select coalesce(NULL,44,55);44hive (app)> select coalesce(NULL,NULL,55);55
2、 条件判断函数
1)IF(boolean testCondition, T valueTrue, T valueFalseOrNull)
功能:if(条件表达式,结果1,结果2),类似java中的三目运算符。如果条件表达式testCondition 为true,就返回结果1 valueTrue,否则返回结果2 valueFalseOrNull。(valueTrue,valueFalseOrNull可以是任意类型的返回值)
举例:
hive (app)> select if(1=1,'hzy','ytr');hzyhive (app)> select if(1=2,'hzy','ytr');ytr
2)CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END (不常用)
功能:如果a等于b,那么返回c;如果a等于d,那么返回e;后面还可以有无数个[WHEN d THEN e],最后else可以省略,加else会将剩余结果归到这一类, 不加else如果有剩余结果未被归类会返回NULL。
其中的a、b、c、d、e、f等既可以是一个表字段,也可以是自己自定义的内容。
这个函数因为限定了只能是等于的关系,且可以被下面的case函数替代,所以使用较少。
举例:
hive (app)> select case 1 when 1 then 'hzy' else 'ytr' end;hzyhive (app)> select case 1 when 2 then 'hzy' else 'ytr' end;ytr
3)CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END (常用)
功能:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e。
这里所有WHEN与THEN之间的都必须是条件表达式,只能是TRUE或者FALSE的结果,否则会报错。其余THEN后的返回项既可以是一个表字段,也可以是自己自定义的内容。
举例:
hive (app)> select case when 1=1 then 'hzy' else 'ytr' end;hzyhive (app)> select case when 1=2 then 'hzy' else 'ytr' end;ytr
3、条件函数的使用
所有的条件函数在使用时,均可与其他任何函数进行嵌套使用,最常用的是和COUNT函数结合使用:
COUNT(CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END)
COUNT(IF(boolean testCondition, T valueTrue, T valueFalseOrNull))

点个在看你最好看





