hive分隔符问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive分隔符问题相关的知识,希望对你有一定的参考价值。

参考技术A

1.hive默认字段分隔符 ^A (使用vim文本编辑显示),常用 ASCII八进制 \'\\001\' 或者 UNICODE编码十六进制 \'\\u0001\' 进行设置;通过notepad++打开显示为 SOH

2.hive特殊分隔符 ^B (使用vim文本编辑显示),常用 ASCII八进制 \'\\002\' 或者 UNICODE编码十六进制 \'\\u0002\' 进行设置;通过notepad++打开显示为 STX

3.hive特殊分隔符 ^C (使用vim文本编辑显示),常用 ASCII八进制 \'\\003\' 或者 UNICODE编码十六进制 \'\\u0003\' 进行设置;通过notepad++打开显示为 ETX ·

在 Hive 中使用分隔符连接多行

【中文标题】在 Hive 中使用分隔符连接多行【英文标题】:Concat multiple rows with a delimiter in Hive 【发布时间】:2017-08-14 10:04:48 【问题描述】:

我需要用“~”作为分隔符逐行连接字符串值。 我有以下数据:

我需要以 'row_id' 的升序为每个 'id' 连接 'Comment' 列,并以 '~' 作为分隔符。

预期输出如下:

GROUP_CONCAT 不是一个选项,因为它在我的 Hive 版本中无法识别。 我可以使用collect_setcollect_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分隔符问题的主要内容,如果未能解决你的问题,请参考以下文章

Hive load外部文件时如何区别分隔符与文本内容

hive字段分隔符和数组分隔符

hive 特殊分隔符 0X1B

hive split 如何取最后一个分隔符

hive 行分隔符怎么指定? 有指定的必要吗?

使用多字符分隔符创建 HIVE 表