首页 > 代码库 > hive函数总结

hive函数总结

9、正则表达式解析函数:regexp_extract

语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;  
  2. the  
  3. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;  
  4. bar  
  5. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;  
  6. foothebar  

10、URL解析函数:parse_url,parse_url_tuple(UDTF)

语法: parse_url(string urlString, string partToExtract [, string keyToExtract]),parse_url_tuple功能类似parse_url(),但它可以同时提取多个部分并返回
返回值: string
说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) from dual;  
  2. facebook.com  
  3. hive> select parse_url_tuple(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1‘, ‘QUERY:k1‘, ‘QUERY:k2‘);  
  4. v1 v2  

11、json解析函数:get_json_object

语法: get_json_object(string json_string, string path)
返回值: string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select  get_json_object(‘{“store”:  
  2. >   {“fruit”:\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],  
  3. >    “bicycle”:{“price”:19.95,”color”:”red”}  
  4. >   },  
  5. >  “email”:”amy@only_for_json_udf_test.net”,  
  6. >  “owner”:”amy”  
  7. > }  
  8. > ‘,’$.owner’) from dual;  
  9. amy  

12、集合查找函数: find_in_set

语法: find_in_set(string str, string strList)
返回值: int
说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0(只能是逗号分隔,不然返回0)
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select find_in_set(‘ab’,‘ef,ab,de’) from dual;  
  2. 2  
  3. hive> select find_in_set(‘at’,‘ef,ab,de’) from dual;  
  4. 0  

13、行转列:explode (posexplode Available as of Hive 0.13.0)

说明:将输入的一行数组或者map转换成列输出
语法:explode(array (or map))
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select explode(split(concat_ws(‘,‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘),‘,‘)) from test.dual;  
  2. 1  
  3. 2  
  4. 3  
  5. 4  
  6. 5  
  7. 6  
  8. 7  
  9. 8  
  10. 9  

14、多行转换:lateral view

说明:lateral view用于和json_tuple,parse_url_tuple,split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
举例:

[sql] view plain copy 技术分享技术分享
  1. hive> select s.x,sp from test.dual s lateral view explode(split(concat_ws(‘,‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘),‘,‘)) t as sp;  
  2. x sp  
  3. a 1  
  4. b 2  
  5. a 3  

解释一下,from后面是你的表名,在表名后面加lateral view explode。。。(你的行转列sql) ,还必须要起一个别名,我这个字段的别名为sp。然后再看看select后面的 s.*,就是原表的字段,我这里面只有一个字段,且为X

多个lateral view的sql类如:

[sql] view plain copy 技术分享技术分享
  1. SELECT * FROM exampleTable LATERAL VIEW explode(col1) myTable1 AS myCol1 LATERAL VIEW explode(myCol1) myTable2 AS myCol2;  

抽取一行数据转换到新表的多列样例:

http_referer是获取的带参数请求路径,其中非法字符用\做了转义,根据路径解析出地址,查询条件等存入新表中,

[sql] view plain copy 技术分享技术分享
  1. drop table if exists t_ods_tmp_referurl;  
  2. create table t_ ods _tmp_referurl as  
  3. SELECT a.*,b.*  
  4. FROM ods_origin_weblog a LATERAL VIEW parse_url_tuple(regexp_replace(http_referer, "\"", ""), ‘HOST‘, ‘PATH‘,‘QUERY‘, ‘QUERY:id‘) b as host, path, query, query_id;   

复制表,并将时间截取到日:

[sql] view plain copy 技术分享技术分享
    1. drop table if exists t_ods_tmp_detail;  
    2. create table t_ods_tmp_detail as   
    3. select b.*,substring(time_local,0,10) as daystr,  
    4. substring(time_local,11) as tmstr,  
    5. substring(time_local,5,2) as month,  
    6. substring(time_local,8,2) as day,  
    7. substring(time_local,11,2) as hour  
    8. From t_ ods _tmp_referurl b; 

hive函数总结