hive高频函数(一)

简介: hive高频函数(一)

符串处理类

nvl

第一个参数是null则用第二个值显示

hive> select nvl(null,1);
1
hive> select nvl('a',1);
a

这个函数我们经常不希望有null出现的时候,把null转化成一个默认值

trim

去掉一头一尾的空格

hive> select trim(' Jeremy Jhon ');
Jeremy Jhon

regexp

这个函数就是正则匹配的函数,返回匹配成功或者失败

hive> select 'QQqq' regexp('.*qq.*');
true

regexp_replace

这个函数本来的意思是匹配到替换正则匹配到的内容

hive> select regexp_replace('qaa91a9a9b','\\d{1}','替换部分');
qaa替换部分替换部分a替换部分a替换部分b

我们经常用的操作是把字符串中的空格干掉

hive> select regexp_replace('qaa a b','\\s','');
qaaab

我们想要把中文的空格也一起去掉的话,这么干:

select regexp_replace(nvl(" aa aa   bbfg  d   你好 ",''),'[\\s]+|[\\u3000]+|[\,]','');
aaaabbfgd你好

coalesce

这个函数可以传入多列,遇到第一个值不为零的时候停止

hive> select coalesce(null,1);
1
hive> select coalesce(null,null,null,1);
1

这个操作我们经常 在hive etl中做数据合并的时大量使用到,我们需要把前一天的数据和当天的数据做合并,这种时候如果当天数据是null,我们则使用前一天的数据,这样子达到一个merge的效果

类似这样:

insert overwrite table dw.dw_business partition (dt='${dt}')
 select
 coalesce(t1.id, t2.id) as id
,coalesce(t1.name, t2.name) as name
...
,coalesce(t1.data_from, t2.data_from) as data_from
 from (select * from dw.dw_business where dt='${dt}') t1
 full outer join (select * from dw.dw_business where dt=get_dt_date('${dt}',-1) ) t2
 on (t1.id = t2.id and t1.data_from = t2.data_from) ;

concat

这个就是简单把几个字符串连接起来

hive>  select concat('a','b','c','d');
abcd

这个函数在连接的时候发现null了,就会返回null

hive> select concat('a','b',null);
NULL

concat_ws

这个函数允许我们指定一个连接符号去做字符串链接

hive> select concat_ws('-','b','c','d');
b-c-d

这个函数会把null给忽略掉

hive> select concat_ws('','a','b',null);
ab

instr

这个函数会返回后面字符串在原有字符串的位置

hive> select instr("abcde",'b');
2
b在abcde中出现位置是2,不存在的时候则返回0,我们用这个函数可以判断字符串的包含关系

条件判断

条件判断其实是为了实现一些程序上面的逻辑,到了sql下面也有条件判断的操作

if

hive> select if(1<2,'a','b');
a
hive> select if(1>2,'a','b');
b

基本操作就是if后面带条件,true就输出第一个,false就输出第二个,这个操作在我们判断某些结果的时候大量使用到:

select if(cnt==0,'数据为空','有数据') as res from 
( select  count(1) as cnt   from dw.dw_business where dt='${dt}'  ) t

case when

case when就是多分枝的情况,我们希望满足什么场景就取什么值。

hive> select
    >  case 
    >  when a>=90  then '优秀' 
    >  when a<90 and a>70  then '良好'
    >  when a<70 and a>60  then '及格' 
    >  else '不及格' end as level from (select 90 as a ) t;
优秀
目录
相关文章
|
1月前
|
SQL HIVE
Hive LAG函数分析
Hive LAG函数分析
45 0
|
1月前
|
SQL JSON Java
Hive【Hive(四)函数-单行函数】
Hive【Hive(四)函数-单行函数】
|
1月前
|
SQL 分布式计算 HIVE
Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!
在Hive 3.1.2和Spark 3.0.2集群环境中,遇到`dayofweek`函数bug。当`create_date`为字符串类型时,`dayofweek`函数结果错位。修复方法是将`create_date`转换为`date`类型。在Spark SQL中,原始代码能正常运行,未出现此问题。因此建议在Hive中使用转换后的日期类型以避免错误。
|
1月前
|
SQL XML JSON
Hive函数全解——思维导图 + 七种函数类型
Hive函数全解——思维导图 + 七种函数类型
41 2
Hive函数全解——思维导图 + 七种函数类型
|
1月前
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
|
28天前
|
SQL Java 程序员
Hive反射函数的使用-程序员是怎么学UDF函数的
Hive反射函数的使用-程序员是怎么学UDF函数的
7 0
|
28天前
|
SQL HIVE 数据格式
Hive高频函数(二)
Hive高频函数(二)
21 0
|
1月前
|
SQL 数据处理 HIVE
【Hive】写出Hive中split、coalesce及collect_list函数的用法?
【4月更文挑战第17天】【Hive】写出Hive中split、coalesce及collect_list函数的用法?
|
1月前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
|
1月前
|
SQL HIVE 索引
Hive【Hive(五)函数-高级聚合函数、炸裂函数】
Hive【Hive(五)函数-高级聚合函数、炸裂函数】