hive_sql函数

1.regexp_replace替换函数,对应oracle中和db2中的replace函数

2.星期函数
2.1date_format()函数--1-7是周一到周天
select date_format(start_time ,'u') q, start_time from source_zjdw.net_cdr_vs_o limit 1;--20180624是星期天

hive_sql函数

注意:start_time只能是2018-01-01这种形式,如果是20170805201044这种形式的话,要输出星期几就要转化一下:
select case when
date_format(concat(substr(eventtime,1,4),'-',substr(eventtime,5,2),'-',substr(eventtime,7,2)),'u')
in (6,7) then 'week' else 'work' end week from source_oidd.oidd_hour_m;
hive_sql函数

2.2 pmod(datediff(start_time,'取个最近的星期天日期'),7) --0为星期天,1-6是周一到周六 datediff()日期相减
select pmod(datediff('2018-06-26','2018-06-24'),7) q, start_time from source_zjdw.net_cdr_vs_o limit 1;--20180624是星期天

hive_sql函数

3.hive字符串分割函数

split(str, regex) ,返回值为一个数组
a.基本用法
例1:
split('a,b,c,d',',')
得到的结果:
["a","b","c","d"]
select split('a,b,c,d',',') from source_zjdw.net_cdr_vs_o limit 1;
hive_sql函数
b.截取字符串中的某个值:
当然,我们也可以指定取结果数组中的某一项
例2取第一个值,即数组中的0:
split('a,b,c,d',',')[0]
得到的结果:
select split('a,b,c,d',',')[0] from source_zjdw.net_cdr_vs_o limit 1;

hive_sql函数

c.特殊字符的处理:
特殊分割符号
regex 为字符串匹配的参数,所以遇到特殊字符的时候需要做特殊的处理
例3:  "." 点
split('192.168.0.1','.')
得到的结果:

select split('192.168.0.1','.') from source_zjdw.net_cdr_vs_o limit 1;

hive_sql函数

正确的写法--要用转义字符:
split('192.168.0.1','\\.')
得到的结果:
["192","168","0","1"]

select split('192.168.0.1','\\.') from source_zjdw.net_cdr_vs_o limit 1;

hive_sql函数

需要注意的是:
当然当split包含在 "" 之中时 需要加4个\
如 hive -e "....  split('192.168.0.1','\\\\.') ... "  不然得到的值是null 
同样的 | 等特殊符号也需要做类似 处理

4.字符串处理函数:instr()--Oracle中的函数

hive_sql函数

 select instr('intelligent','e')  from source_zjdw.net_cdr_vs_o limit 1;

hive_sql函数

5.concat_ws自定义分隔符函数:----对应oracle中的wm_concat(列名)函数
可以实现列转行、行转列
create table wangxuan_test(id string,name string);
insert into wangxuan_test values(1,'a');
insert into wangxuan_test values(1,'b');

select concat_ws(',',id,name) from wangxuan_test;--hive
select wm_concat(name) from wangxuan_test; --oracle