2017-08-29 120 views
1

我有一個兩列的配置單元表。兩欄的類型都是字符串。一個是簡單的客戶端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

使用explode()collect_set()通過Client_id得到一套獨特的,使用concat_ws和組彙總字符串:

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