hive中如何实现group_concat函数

上节说到在mysql中我们很容易使用group_concat(具体用法)
但是在hive中很遗憾的是没有这个函数

那我们如何在不使用UDF函数的情况下使用它呢: 那就是使用hive中自带的collect_list/collect_set加上concat_ws函数
关于collect_list/collect_set的区别请参考下此篇文章
https://blog.csdn.net/LINBE_blazers/article/details/89198019

直接上实例,先看一下我们的表数据和字段结构

在这里插入图片描述

我们的需求是按名字分组,每行显示名字,所选的所有科目(要求@符号连接),所有的科目对应的成绩(要求-符号连接)

1).先使用collect_set函数使多行成为一行数组

hive> select name,collect_set(subject)  res1 ,
    > collect_set(cast(score as string)) res2 
    > from stu group by name;

在这里插入图片描述

2). 加上concat_ws函数可以取出数组中的每一个元素的值在用分隔符连接

hive> select name,concat_ws('@',collect_set(subject))  res1 ,
    > concat_ws('-',collect_set(cast(score as string))) res2 
    > from stu group by name;

在这里插入图片描述
这样我们在hive中最终实现了mysql中的group_concat函数.

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值