55

我正在寻找 Hive 中的内置字符串拆分功能?例如,如果字符串是:

A|B|C|D|E

然后我想要一个像这样的功能:

array<string> split(string input, char delimiter)

这样我就回来了:

[A,B,C,D,E]

Hive 中是否存在这样的内置拆分功能。

我只能看到regexp_extractregexp_replace。我很想看到 aindexOf()split()string 函数。

4

3 回答 3

67

确实存在基于正则表达式的拆分功能。它没有在教程中列出,但在 wiki 的语言手册中列出:

split(string str, string pat)
   Split str around pat (pat is a regular expression) 

在您的情况下,分隔符“ |”作为正则表达式具有特殊含义,因此应将其称为“ \\|”。

于 2010-11-04T12:22:01.970 回答
50

Hive 中拆分的另一个有趣用例是,例如,当表中的列ipname具有值“abc11.def.ghft.com”并且您想要将“abc11”拉出时:

SELECT split(ipname,'[\.]')[0] FROM tablename;
于 2012-11-15T23:00:25.030 回答
12

只是对 Bkkbrad 给出的答案的澄清。

我尝试了这个建议,但它对我不起作用。

例如,

split('aa|bb','\\|')

制作:

["","a","a","|","b","b",""]

但,

split('aa|bb','[|]')

产生了预期的结果:

["aa","bb"]

包括元字符“|” 方括号内的内容会使其按原意按字面意思解释,而不是按元字符解释。

有关正则表达式的这种行为的详细说明,请参阅:http ://www.regular-expressions.info/charclass.html

于 2017-06-09T19:07:56.663 回答