已经询问并回答了SQL(Convert multiple rows into one with comma as separator),提到的任何方法都可以在Hive中使用,例如离开这个:
+------+------+
| Col1 | Col2 |
+------+------+
| a | 1 |
| a | 5 |
| a | 6 |
| b | 2 |
| b | 6 |
+------+------+
到此:
+------+-------+
| Col1 | Col2 |
+------+-------+
| a | 1,5,6 |
| b | 2,6 |
+------+-------+
答案 0 :(得分:18)
聚合器函数collect_set
可以实现您想要获得的功能。 Here是文档。所以你可以写一个像这样的查询:
SELECT Col1, collect_set(Col2)
FROM your_table
GROUP BY Col1;
然而,MySQL GROUP BY
和Hive collect_set
之间存在一个显着差异,即GROUP_CONCAT
在结果数组中也保留重复项,collect_set
会删除重复项阵列。在您显示的示例中,Col2
没有重复的组值,因此您可以继续使用它。
答案 1 :(得分:6)
并且collect_list
将采用完整列表(带有重复项)。
答案 2 :(得分:5)
试试这个
SELECT Col1, concat_ws(',', collect_set(Col2)) as col2
FROM your_table
GROUP BY Col1;