如何拆分逗号分隔的字符串并在配置单元中收集唯一值?

how to split comma separated string and collect unique values in hive?

我有一个包含两列的配置单元 table。两列的类型都是字符串。一个是简单的客户端 ID,另一个是命令分隔的项目 ID 字符串。可以有多个具有相同客户 ID 但不同项目 ID 字符串的行。

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

原始数据table:

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

使用 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