1, collect_set

将有相同key的值,收集成一个set里,返回array

比如,返回某台设备 装了哪些App(package_name),一台设备一条记录
deviceId1    [ App1,App2,App3,App3]
…….
…….
select deviceId,collect_set(package_name) from table group by deviceId

2, get_json_object &  json_tuple
get_json_object:从JSON里抽取字段值,如果获取多个字段,需要写多个函数获取,效率较低
select get_json_object(content,’$.field_key’) from  table_name ;
json_tuple:可以结合lateral view同时获取多个字段,获取多个字段效率较高
select a.* from table_name lateral view  json_tuple(jsonstr,’deviceId’,’userId’,’realmId’) a as f1,f2,f3 where dt=’2016-07-01′

3, regexp_extract
regexp_extract(str, regexp[, idx])   字符串正则解析函数

str是被解析的字符串

regexp 是正则表达式

idx是返回结果 取表达式的哪一部分  默认值为1。

0表示把整个正则表达式对应的结果全部返回

1表示返回正则表达式中第一个() 对应的结果 以此类推

注意点:

要注意的是idx的数字不能大于表达式中()的个数。

select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,0) from default.dual;

得到的结果为:

x=18abc

select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,1) from default.dual;

得到的结果为:

18

select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4′,’x=([0-9]+)([a-z]+)’,2) from default.dual;

得到的结果为:

abc


 

4,Parse_url

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

【host,path,query,ref,protocol,file,authority,userinfo】

select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘PROTOCOL’) from dual;   –http
select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘HOST’) from dual;—facebook.com​
select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘REF’) from dual;—空​
select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘PATH’) from dual;—/path/p1.php​
select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘QUERY’) from dual;—空​
​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘FILE’) from dual;​—/path/p1.php?query=1​
​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘AUTHORITY’) from dual;​—facebook.com​
​select parse_url(‘http://facebook.com/path/p1.php?query=1′, ‘USERINFO’) from dual;​—空


 

5,lateral view

lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
多个lateral view:
select a.*,c.*,b.* from lestore_dsp_log_mid lateral view   json_tuple(ad,’placeid’,’cadtype’,’adowner’,’adid’,’pkg’,’apk’,’creativetype’,’price’) a as placeid,cadtype,adowner,adid,pkg,apk,creativetype,price   lateral view json_tuple(dsp,’site_id’,’requestid’,’impressionid’) c as site_id,requestid,impressionid  lateral view json_tuple(device,’mac’,’anid’,’imei’,’imsi’) b as mac,anid,imei,imsi  where dt=’2016-07-14′ and action = ‘click’ ;