2017-08-29 9 views
1

私は2つの列を持つハイブテーブルを1つ持っています。両方の列の型は文字列です。 1つは単純なクライアントIDであり、他はコマンドIDで区切られたアイテムIDです。同じクライアントIDを持つ複数の行がありますが、異なるアイテムID文字列があります。カンマ区切り文字列を分割し、ハイブで一意の値を収集する方法は?

2つの列を持つテーブルを生成する1つのハイブクエリが必要です。 1つはクライアントID、もう1つはカンマで区切られた文字列で、すべてのユニークな項目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 
関連する問題