如何拆分逗号分隔字符串并在hive中收集唯一值?

时间:2017-08-29 09:34:57

标签: hive hiveql explode

我有一个带两列的蜂巢表。两列的类型都是字符串。一个是简单的客户端ID,另一个是命令分隔的项目ID字符串。可以有多个具有相同客户端ID但不同的项ID字符串的行。

我想要一个生成具有两列的表的配置单元查询。一个是客户端ID,另一个是逗号分隔的字符串,包含所有唯一的项ID。

原始表中的数据:

Client Id       Item Ids
1               1,2,3,4
2               3,4,6,8
4               4,5,1,3
2               3,4,7,8
3               5,6,8,2
4               7,8,9,4

查询应生成此结果

 Client Id       Item Ids
 1               1,2,3,4
 2               3,4,7,6,8
 4               4,5,1,3,7,8,9
 3               5,6,8,2

1 个答案:

答案 0 :(得分:1)

使用explode()collect_set()使用concat_ws获取唯一集合,汇总字符串,并按Client_id分组:

hive> select Client_id, concat_ws(',',collect_set(item_id)) as item_ids
    > from test_t lateral view explode(split(item_ids,',')) a as item_id
    > group by Client_id;

输出:

OK
1       1,2,3,4
2       3,4,6,8,7
3       5,6,8,2
4       4,5,1,3,7,8,9