HIVE 一行转多行输出办法

1.问题描述

hive UDF 
格式: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 福音

你可能感兴趣的:(HIVE 一行转多行输出办法)