【问题标题】:how to split comma separated string and collect unique values in hive?如何拆分逗号分隔的字符串并在配置单元中收集唯一值?
【发布时间】:2018-02-06 16:50:35
【问题描述】:

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

【问题讨论】:

    标签: string hive hiveql explode


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 2018-12-21
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多