我正在寻找 Hive 中的内置字符串拆分功能?例如,如果字符串是:
A|B|C|D|E
然后我想要一个像这样的功能:
array<string> split(string input, char delimiter)
这样我就回来了:
[A,B,C,D,E]
Hive 中是否存在这样的内置拆分功能。
我只能看到regexp_extract
和regexp_replace
。我很想看到 aindexOf()
和split()
string 函数。
确实存在基于正则表达式的拆分功能。它没有在教程中列出,但在 wiki 的语言手册中列出:
split(string str, string pat)
Split str around pat (pat is a regular expression)
在您的情况下,分隔符“ |
”作为正则表达式具有特殊含义,因此应将其称为“ \\|
”。
Hive 中拆分的另一个有趣用例是,例如,当表中的列ipname
具有值“abc11.def.ghft.com”并且您想要将“abc11”拉出时:
SELECT split(ipname,'[\.]')[0] FROM tablename;
只是对 Bkkbrad 给出的答案的澄清。
我尝试了这个建议,但它对我不起作用。
例如,
split('aa|bb','\\|')
制作:
["","a","a","|","b","b",""]
但,
split('aa|bb','[|]')
产生了预期的结果:
["aa","bb"]
包括元字符“|” 方括号内的内容会使其按原意按字面意思解释,而不是按元字符解释。
有关正则表达式的这种行为的详细说明,请参阅:http ://www.regular-expressions.info/charclass.html