【问题标题】:Column to comma separated value in HiveHive 中以逗号分隔值的列
【发布时间】:2014-03-28 06:05:45
【问题描述】:

已针对 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   |
+------+-------+

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    聚合函数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 没有重复的组值,因此您可以继续使用它。

    【讨论】:

    • GROUP_CONCAT 可以使用 distinct 消除重复。 GROUP_CONCAT( DISTINCT 表达式 ORDER BY 表达式 SEPARATOR sep );
    【解决方案2】:

    还有collect_list 将获取完整列表(有重复项)。

    【讨论】:

      【解决方案3】:

      试试这个

      SELECT Col1, concat_ws(',', collect_set(Col2)) as col2
      FROM your_table
      GROUP BY Col1;
      

      apache.org documentation

      【讨论】:

        猜你喜欢
        • 2018-07-18
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多