我是靠谱客的博主 安静手套,最近开发中收集的这篇文章主要介绍Hive的Collect函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有以下表

idname
1001A
1001B
1001C

实现以下功能

idname
1001A,B,C

即按照id 进行group by,将每个id的name组成一个list放到name字段中。

select id,collect_list(name) from table group by id

若name中有重复的值,可以用collect_set函数进行去重

collect_list函数返回的类型是array< ? >类型,?表示该列的类型
怎么转为string类型?

我们可以使用concat_ws函数,但是该函数仅支持string和array< string > 所以对于该列不是string的列,先转为string

select id,concat_ws(',',collect_list(cast (name as string))) from table group by id

最终实现了我们需要的输出结果

concat_ws函数的意思是用逗号将所有的string组合到一起,用逗号分割显示

select concat_ws(',',"A","B");

上面代码的结果就是
A,B


以上是行转列,列转行可用到explode

hive> select explode(split(concat_ws(',','1','2','3','4'),',')) from default.dual;
1
2
3
4

表示1,2,3,4拼接起来,然后再用逗号分隔成列,应用到表中如下面所示

hive> select * from tt  s  lateral view explode(split("a b c d"," "))  t3 as sp;                 ------需要起别名,tt表中只有一个字段有数据。
A  a
A  b
A  c
A  d

最后

以上就是安静手套为你收集整理的Hive的Collect函数的全部内容,希望文章能够帮你解决Hive的Collect函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部