本篇博客介绍Hive中的常见的条件函数用法~
返回数值类型 | 函数名\所需参数\参数数据类型 | 描述 |
---|---|---|
T |
if(boolean testCondition, T valueTrue, T valueFalseOrNull) |
如果testCondition 为true就返回valueTrue,否则返回valueFalseOrNull。(valueTrue,valueFalseOrNull可以是任意类型的返回值) |
boolean | isnull( a ) | 如果a为null就返回true,否则返回false |
boolean | isnotnull ( a ) | 如果a为非null就返回true,否则返回false |
T | nvl(T value, T default_value) | 如果value值为NULL就返回default_value,,如果不为null就返回value本身 |
T |
coalesce(T v1, T v2, ...) |
返回第一非null的值,如果全部都为NULL就返回NULL 如:coalesce(NULL,44,55)=44 |
T |
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END |
如果a=b就返回c,a=d就返回e,否则返回f 如CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END 将返回4 |
T |
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END |
如果a=ture就返回b,c= ture就返回d,否则返回e 如:CASE WHEN 5>0 THEN 5 WHEN 4>0 THEN 4 ELSE 0 END 将返回5;CASE WHEN 5<0 THEN 5 WHEN 4<0 THEN 4 ELSE 0 END 将返回0 |
isnull( a ) |
isnotnull ( a ) |
nvl(T value, T default_value) |
coalesce(T v1, T v2, ...) |
功能:
如果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
功能:
a可以为任意数据类型的值,如果a为null就返回true,否则返回false。(不常用)
举例:
hive (app)> select isnull(null);
true
hive (app)> select isnull(1);
false
功能:
功能与isnull相反,a可以为任意数据类型的值,如果a不为null就返回true,否则返回false。(不常用)
举例:
hive (app)> select isnotnull (null);
false
hive (app)> select isnotnull (1);
true
功能:
返回参数中第一个不是null的值,如果全部都为NULL就返回NULL,可以传任意个参数。(不常用)
举例:
hive (app)> select coalesce(NULL,44,55);
44
hive (app)> select coalesce(NULL,NULL,55);
55
if(boolean testCondition, T valueTrue, T valueFalseOrNull) |
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END |
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END |
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');
hzy
hive (app)> select if(1=2,'hzy','ytr');
ytr
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;
hzy
hive (app)> select case 1 when 2 then 'hzy' else 'ytr' end;
ytr
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;
hzy
hive (app)> select case when 1=2 then 'hzy' else 'ytr' end;
ytr
能看到这里的同学,就右上角点个赞吧,3Q~