2019独角兽企业重金招聘Python工程师标准>>>
1.问题描述
hive UDF
格式:oc号1_an号1_次数;oc号2_an号2_次数
转换结果: oc号1 an号1 次数
oc号2 an号2 次数
一行转多行,一行转多列
第二步拆分:explode(oc_an) (参考文档:A) 结果:
第三分割:split('oc号1_an号1_次数,'_')
第四步: 一行转多列? 简单用split分割,不过也可以写UDTF行数转换
格式:oc号1_an号1_次数;oc号2_an号2_次数
转换结果: oc号1 an号1 次数
oc号2 an号2 次数
一行转多行,一行转多列
2.实现思路
第一步分割:split('oc号1_an号1_次数;oc号2_an号2_次数',';') 结果Array<String> oc_an = [oc号1_an号1_次数,oc号2_an号2_次数]第二步拆分:explode(oc_an) (参考文档:A) 结果:
第三分割:split('oc号1_an号1_次数,'_')
第四步: 一行转多列? 简单用split分割,不过也可以写UDTF行数转换
3.实现案例
select ip, split(OC_AN ,'_')[0] as oc,split(OC_AN ,'_')[1] as an,split(OC_AN ,'_')[2] as click from longyuan_pps_base_hour LATERAL VIEW explode(split('100_101_3\;101_102_5','\;')) adTable AS OC_AN where pf=201 and p=11 and p1=114 and t=11
and bs='action__logo_view_auto' and dt='20140213'
4.参考文档
A.https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView
B.http://dacoolbaby.iteye.com/blog/1932077 福音