Hive 有字符串拆分功能吗?
Posted
技术标签:
【中文标题】Hive 有字符串拆分功能吗?【英文标题】:Does Hive have a String split function? 【发布时间】:2011-05-03 05:36:43 【问题描述】:我正在寻找 Hive 中的内置字符串拆分功能?例如如果字符串是:
A|B|C|D|E
那我想有这样的功能:
array<string> split(string input, char delimiter)
这样我就回来了:
[A,B,C,D,E]
Hive 中是否存在这样的内置拆分功能。
我只能看到regexp_extract
和regexp_replace
。我很想看到indexOf()
和split()
字符串函数。
【问题讨论】:
【参考方案1】:确实存在基于正则表达式的拆分功能。没有在in the tutorial列出,但在the language manual on the wiki列出:
split(string str, string pat)
Split str around pat (pat is a regular expression)
在您的情况下,分隔符“|
”作为正则表达式具有特殊含义,因此应将其称为“\\|
”。
【讨论】:
分号不在正则表达式元字符列表中(参见,例如,hscripts.com/tutorials/regular-expression/…)。因此,您应该只能使用 ';'而不是 '\\;'。 页面不存在了:cwiki.apache.org/confluence/display/HADOOP2/Hive/LanguageManual/… 最新的语言手册链接:cwiki.apache.org/confluence/display/Hive/…【参考方案2】:只是对 Bkkbrad 给出的答案的澄清。
我尝试了这个建议,但它对我不起作用。
例如,
split('aa|bb','\\|')
制作:
["","a","a","|","b","b",""]
但是,
split('aa|bb','[|]')
产生了预期的结果:
["aa","bb"]
包括元字符“|”方括号内的内容会按原意按字面意思解释,而不是元字符。
有关正则表达式的这种行为的详细说明,请参阅:http://www.regular-expressions.info/charclass.html
【讨论】:
【参考方案3】:另一个在 Hive 中拆分的有趣用例是,例如,当表中的列 ipname
具有值“abc11.def.ghft.com”并且您想要提取“abc11”时:
SELECT split(ipname,'[\.]')[0] FROM tablename;
【讨论】:
是拆分可以在GROUP BY
中使用,如select split(area,'[_]')[0],isp,pc_mobile,device,count(userip) from usemap_without_ptime ORDER BY split(area,'[_]')[0],isp,pc_mobile,device
实际上您必须将模式放入正则表达式中。应该是 SELECT split(ipname,'\\.')[0] FROM tablename以上是关于Hive 有字符串拆分功能吗?的主要内容,如果未能解决你的问题,请参考以下文章