hivesql -行转列 lateral view explode

拿到一个需求:需要找出50个客户使得用户画像标签尽可能丰富(有值的)
tips:用户画像标签有500多个分散在30多个表中,即一个用户有500多个标签属性

解决办法:
例如有三张表a1,a2,a3,每张表的字段不同(但是客户数是一样的id)

select
    *
from
    test.test1 
left join test.test2 on
    test1.id = test2.id2
left join test.test3 on
    test3.id3 = test1.id;

结果如下:

找出这三张表中标签字段最丰富的客户
思路:
a.先将要比较的字段拼接成一行
b.再行转列(此时所有的字段都存放到一列中了,相当于求该列有值的情况下,哪个客户的记录数最多的问题了)

select c.* from (
select b.id,count(id) col_num from (
select * from (
select test1.id,
       concat_ws('_',test1.*,test2.*,test3.*
        ) conent
from  homestead_test.test1
left join  homestead_test.test2 on test1.id = test2.id2
left join  homestead_test.test3 on test1.id= test3.id3
) a lateral view explode(split(conent,'_')) v_num as num
) b  where b.num !='' and b.num!='0' and b.num!='0.0' group by b.id
) c order by c.col_num desc

结果如下:得到每个id 对应的有值的字段


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值