hive 查看函数:
show functions;
desc functions 函数名
parse_url(url, partToExtract[, key]) - extracts a part from a URL
解析URL字符串,partToExtract的选项包含[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]。
举例:
parse_url(‘http://facebook.com/path/p1.php?query=1’, ‘HOST’)返回’facebook.com’
parse_url(‘http://facebook.com/path/p1.php?query=1’, ‘PATH’)返回’/path/p1.php’
parse_url(‘http://facebook.com/path/p1.php?query=1’, ‘QUERY’)返回’query=1’,
可以指定key来返回特定参数,例如
parse_url(‘http://facebook.com/path/p1.php?query=1’, ‘QUERY’,‘query’)返回’1’,
parse_url(‘http://facebook.com/path/p1.php?query=1#Ref’, ‘REF’)返回’Ref’
parse_url(‘http://facebook.com/path/p1.php?query=1#Ref’, ‘PROTOCOL’)返回’http’
–获取星期几可以使用以下函数
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
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;
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
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