如何拆分逗号分隔的字符串并在配置单元中收集唯一值?
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
我有一个包含两列的配置单元 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