在Hive中以逗号分隔值的列

glp*_*glp 9 hadoop hive

已经有人问过并回答了SQL(将多行转换为一个逗号作为分隔符),所提到的任何方法都可以在Hive中工作,例如从这里开始:

+------+------+
| Col1 | Col2 |
+------+------+
| a    | 1    |
| a    | 5    |
| a    | 6    |
| b    | 2    |
| b    | 6    |
+------+------+
Run Code Online (Sandbox Code Playgroud)

对此:

+------+-------+
| Col1 | Col2  |
+------+-------+
| a    | 1,5,6 |
| b    | 2,6   |
+------+-------+
Run Code Online (Sandbox Code Playgroud)

Nee*_*els 19

聚合器功能collect_set可以实现您想要获得的功能.是文档.所以你可以写一个像这样的查询:

SELECT Col1, collect_set(Col2)
FROM your_table
GROUP BY Col1;
Run Code Online (Sandbox Code Playgroud)

然而,MySQL GROUP BY和Hive 之间存在一个显着差异,collect_setGROUP_CONCAT在结果数组中保留重复数据,同时collect_set删除数组中出现的重复项.在您显示的示例中,没有重复的组值,Col2因此您可以继续使用它.


小智 8

并且有collect_list将充分列表(一式两份).


小智 5

尝试这个

SELECT Col1, concat_ws(',', collect_set(Col2)) as col2
FROM your_table
GROUP BY Col1;
Run Code Online (Sandbox Code Playgroud)

apache.org文档