在Hive中以逗号分隔值的列

时间:2014-03-28 06:05:46

标签: hadoop hive

已经询问并回答了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   |
+------+-------+

3 个答案:

答案 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;

apache.org documentation