使用GROUP BY的Concat单列字段

Arp*_*pta 4 hadoop hive

有没有办法通过对它们进行分组来组合/连接一列中的字段.例如:

col1   col2
1     aa
1     bb
1     cc
2     dd
2     ee
Run Code Online (Sandbox Code Playgroud)

我想查询类似的东西:

select col1, concat(col2) from tableName group by col1;
Run Code Online (Sandbox Code Playgroud)

输出应该是:

1    aa,bb,cc
2    dd,ee
Run Code Online (Sandbox Code Playgroud)

蜂巢中是否有任何功能可以做到这一点?

小智 7

你可以使用concat_ws()和collect_list()来实现这个目标....

就像是

select id , concat_ws(",", collect_list(val)) from test group by id; 
Run Code Online (Sandbox Code Playgroud)

","是上述查询中的分隔符.

  • 永远不要使用“,”作为分隔符,你会在后期遇到很多问题..使用“:”或与csv不冲突的东西。 (2认同)

vis*_*akh 5

假设您有一个表格test如下:

select id, val from test order by id, val;     
2   aa
2   bb
1   bb
1   aa
Run Code Online (Sandbox Code Playgroud)

你可以使用这个HIVE功能collect_set:

select id, collect_set(val) from test group by id;
1   ["aa","bb"]
2   ["bb","aa"]
Run Code Online (Sandbox Code Playgroud)

但请注意,collect_set返回一组具有重复元素的对象.

您可以在Language Manual Wiki上找到更多详细信息.