在 Hive 中使用分隔符连接多行
Posted
技术标签:
【中文标题】在 Hive 中使用分隔符连接多行【英文标题】:Concat multiple rows with a delimiter in Hive 【发布时间】:2017-08-14 10:04:48 【问题描述】:我需要用“~”作为分隔符逐行连接字符串值。 我有以下数据:
我需要以 'row_id' 的升序为每个 'id' 连接 'Comment' 列,并以 '~' 作为分隔符。
预期输出如下:
GROUP_CONCAT
不是一个选项,因为它在我的 Hive 版本中无法识别。
我可以使用collect_set
或collect_list
,但我无法在其间插入分隔符。
有什么解决办法吗?
【问题讨论】:
请用文字替换图片。 您是否尝试过使用 Hive 提供的 concat 函数?查看此链接:- cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 是的,我尝试了所有给定的 concat 函数。它们都用于按列操作。我正在寻找行明智的操作 【参考方案1】:collect_list 返回数组,而不是字符串。 可以使用 concat_ws 将数组转换为分隔字符串。
这将起作用,没有特定的 cmets 顺序。
select id
,concat_ws('~',collect_list(comment)) as comments
from mytable
group by id
;
+----+-------------+
| id | comments |
+----+-------------+
| 1 | ABC~PRQ~XYZ |
| 2 | LMN~OPQ |
+----+-------------+
【讨论】:
我们可以使用concat() over partition by ()
子句获得相同的结果吗?以上是关于在 Hive 中使用分隔符连接多行的主要内容,如果未能解决你的问题,请参考以下文章