hive多行变一行

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.需求描述

在数据处理过程中,我们不光要将一行变为多行,有时候还需要将多行变为一行。
有如下格式的数据:
msgid appid
1490549504092 1002496
1490549504092 1002505
1490549504105 1005565
1490549504105 1002496
我们可能需要将相同的msgid对应的不同的appid汇聚到一起。怎么完成这个任务呢?

2.collect_set

collect_set可以完美解决上面的需求。直接看代码

SELECT b.msgid,
        b.allappid 
FROM 
    (SELECT a.msgid,
         concat_ws('-',collect_set( cast(a.appid as string))) as allappid
    FROM 
        (SELECT msginfo.msgid AS msgid,
         appinfo.appid AS appid
        FROM XXX tablesample(0.1 percent)
        WHERE date = 20170327
        GROUP BY  msginfo.msgid,appinfo.appid)a
        GROUP BY  a.msgid)b
	where  size(split(b.allappid,"-")) > 1
	limit 100

最终出来的结果:

1490549504092	1002496-1002505
1490549504105	1005565-1002496

3.值得注意的地方

1.collect_set顾名思义,就是根据group by后面的字段分组,然后将collect_set方法里的字段聚合在一块。
2.collect_set接受的参数是string类型,如果是其他类型的数据,需要转为string。
3.split方法返回的是一个数组,求数组长度的函数为size。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值