Hive是否具有String拆分功能?

use*_*855 41 hadoop hive

我在Hive中寻找内置的String拆分功能?例如,如果是

A | B | C | d |电子

那么我想要一个像数组拆分的功能(字符串输入,字符分隔符)

所以我回来了[A,B,C,D,E].

Hive中是否存在这样的内置拆分功能.我只能看到regexp_extract和regexp_replace.我很想看到indexOf()和split()字符串函数.

谢谢

阿贾伊

Bkk*_*rad 51

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

split(string str, string pat)
   Split str around pat (pat is a regular expression) 
Run Code Online (Sandbox Code Playgroud)

在您的情况下,分隔符" |"具有作为正则表达式的特殊含义,因此它应该被称为" \\|".


小智 38

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

SELECT split(ipname,'[\.]')[0] FROM tablename;
Run Code Online (Sandbox Code Playgroud)

  • 实际上,您必须将模式放入正则表达式中。应该是SELECT split(ipname,'\\。')[0] FROM tablename (2认同)

spe*_*nk1 7

请澄清一下Bkkbrad给出的答案。

我尝试了此建议,但对我没有用。

例如,

split('aa|bb','\\|')
Run Code Online (Sandbox Code Playgroud)

生产:

["","a","a","|","b","b",""]
Run Code Online (Sandbox Code Playgroud)

但,

split('aa|bb','[|]')
Run Code Online (Sandbox Code Playgroud)

产生了预期的结果:

["aa","bb"]
Run Code Online (Sandbox Code Playgroud)

包括元字符“ |” 方括号内的内容会导致按原义对其进行解释,而不是将其解释为元字符。

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