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

um6iljoc  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(426)

我有一个两列的Hive表。两列的类型都是字符串。一个是简单的客户端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
kgqe7b3p

kgqe7b3p1#

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

相关问题