hivesql -行转列 lateral view explode

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

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

  1. select * from a1 left join a2 on a1.id= a2.id left join a3 on a3.id=a1.id
    结果如下:
    在这里插入图片描述
  2. 找出这三张表中标签字段最丰富的客户
    思路:
    a.先将要比较的字段拼接成一行
    b.再行转列(此时所有的字段都存放到一列中了,相当于求该列有值的情况下,哪个客户的记录数最多的问题了)
select c.* from (
select b.id,count(id) col_num from (
select * from (
select a1.id,
       concat_ws('_',a1.*,a2.*,a3.*
		) conent
from  a1
left join  a2 on a1.id = a2.id
left join  a3 on a1.id= a3.id
) 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 对应的有值的字段
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值