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是星期天
注意: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;
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是星期天
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;
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;
c.特殊字符的处理:
特殊分割符号
regex 为字符串匹配的参数,所以遇到特殊字符的时候需要做特殊的处理
例3: "." 点
split('192.168.0.1','.')
得到的结果:
select split('192.168.0.1','.') from source_zjdw.net_cdr_vs_o limit 1;
正确的写法--要用转义字符:
split('192.168.0.1','\\.')
得到的结果:
["192","168","0","1"]
select split('192.168.0.1','\\.') from source_zjdw.net_cdr_vs_o limit 1;
需要注意的是:
当然当split包含在 "" 之中时 需要加
4个\
如 hive -e ".... split('192.168.0.1','\\\\.') ... " 不然得到的值是null
同样的 | 等特殊符号也需要做类似 处理
4.字符串处理函数:instr()--Oracle中的函数
select instr('intelligent','e') from source_zjdw.net_cdr_vs_o limit 1;
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