Hive学习之路 (二十二)Hive 常用的内置函数(补充)

hive 查看函数:

show functions;

desc functions 函数名

1.parse_url

parse_url(url, partToExtract[, key]) - extracts a part from a URL
解析URL字符串,partToExtract的选项包含[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]。

举例:

2.关于时间函数

–获取星期几可以使用以下函数

pmod(datediff(‘dateTimeExp’, ‘2012年任意一个星期天的日期’), 7) 获取

–获取第几周(传入的格式必须是yyyy-MM-dd的格式)

weekofyear()

–日期比较(传入的格式必须是yyyy-MM-dd的格式)

datediff(‘’,‘’)

–获取当前日期 unix_timestamp()

select from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:mm:ss’) from dual;
select from_unixtime(unix_timestamp(),‘yyyyMMddHHmmss’) from dual;

–获取6个月之前的第一天(传入的格式必须是yyyy-MM-dd的格式)

select date_format(add_months(‘2018-08-18’,-6),‘yyyyMM01’) from dual;

–增加月份

add_months

3.json解析函数

1)json解析函数:get_json_object

语法: get_json_object(string json_string, string path) 返回值: string 说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。
举例:
hive> select get_json_object(‘{“store”: {“fruit”:[{“weight”:8,“type”:“apple”},{“weight”:9,“type”:“pear”}], “bicycle”:{“price”:19.95,”color”:”red”} }, “email”:”amy@only_for_json_udf_test.net”, “owner”:”amy”}‘,’$.owner’) from dual;
结果:amy

举例:
request ={“store”: {“fruit”:[{“weight”:8,“type”:“apple”},{“weight”:9,“type”:“pear”}], “bicycle”:{“price”:19.95,”color”:”red”} } get_json_object(request,’$.weight’) 结果:9
2)json_tuple(jsonStr, k1, k2, …)

参数为一组键k1,k2……和JSON字符串,返回值的元组。该方法比 get_json_object 高效,因为可以在一次调用中输入多个键。 处理数据样例: {“GPS_LAT”:39.8965125,“GPS_LONG”:116.3493225,“GPS_SPEED”:20.9993625,“GPS_STATE”:“A”,“GPS_TIME”:“2014-01-02 00:00:16”,“IMEI”:“508597”,“after_oxygen_sensor”:132,“air_condion_state”:3,“bdoneNo_after_mileage”:0,“bdoneNo_zero_mileage”:8044,“db_speed”:22,“direction_angle”:358.2585,“front_oxygen_sensor”:64,“instant_fuel”:233,“speed”:1210,“torque”:33,“total_fuel”:0} 处理HIVE语句: select json_tuple(line,‘GPS_LAT’,‘GPS_LONG’,‘GPS_SPEED’,‘GPS_STATE’, ‘GPS_TIME’,) from test;

4.字符串函数

1)语法: regexp_replace(string A, string B, string C)

返回值: string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符
regexp_replace与translate都是替代函数, 只不过replace针对的是字符串,而translate针对的是单个字符。
regexp_replace:
在这里插入图片描述
在这里插入图片描述
替换特殊字符:数据仓库中有字段不合格,有特殊字符,比如换行符,怎么把换行符替换呢?
在这里插入图片描述
在这里插入图片描述

2)正则表达式解析函数:regexp_extract

–语法: regexp_extract(string subject, string pattern, int index) 返回值: string 说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符 举例: hive> select hive> hive> select regexp_extract(‘foothebar’, ‘foo(.?)(bar)’, 1) from dual; the
hive> select regexp_extract(‘foothebar’, ‘foo(.
?)(bar)’, 2) from dual; bar
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual; foothebar
3)空格字符串函数:space

语法: space(int n) 返回值: string 说明:返回长度为n的字符串 举例: hive> select space(10) from dual; hive> select length(space(10)) from dual;
4)重复字符串函数:repeat

语法: repeat(string str, int n) 返回值: string 说明:返回重复n次后的str字符串
举例: hive> select repeat(‘abc’,5) from dual;
结果: abcabcabcabcabc
5)首字符ascii函数:ascii

–语法: ascii(string str) 返回值: int 说明:返回字符串str第一个字符的ascii码
举例: hive> select ascii(‘abcde’) from dual;
6)左补足函数:lpad

语法: lpad(string str, int len, string pad) 返回值: string 说明:将str进行用pad进行左补足到len位 举例: hive> select lpad(‘abc’,10,’td’) from dual; tdtdtdtabc 与GP,ORACLE不同,pad 不能默认
7)右补足函数:rpad

语法: rpad(string str, int len, string pad) 返回值: string 说明:将str进行用pad进行右补足到len位 举例: hive> select rpad(‘abc’,10,’td’) from dual;
结果:abctdtdtdt
8)分割字符串函数: split

语法: split(string str, string pat) 返回值: array 说明: 按照pat字符串分割str,会返回分割后的字符串数组 举例: hive> select split(‘abtcdtef’,'t’) from dual;
结果:[“ab”,“cd”,“ef”]

9)集合查找函数: find_in_set

语法: find_in_set(string str, string strList) 返回值: int 说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0
举例1:
在这里插入图片描述
举例2:
hive> select find_in_set(‘at’,'ef,ab,de’) from dual;
结果: 0

5.字符串处理函数substr和instr

substr一般用于截取字符串的前多少位。
在这里插入图片描述
instr,用来判断是不是存在某字符,以及存在的位置
在这里插入图片描述
通常可以 instr(‘CP_OPERATION’,’#’) =‘0’ 则判断不包含#字符串。

instr 还可以用来判定json的位置并解析出json的value的值。
在这里插入图片描述
用法:
select substr(表a.event_json,instr(表a.event_json,’“phoneNumber”:’)+15,11) as phone_number from 表a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值