【问题标题】:Does Hive have a String split function?Hive 有字符串拆分功能吗?
【发布时间】: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_extractregexp_replace。我很想看到indexOf()split() 字符串函数。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    确实存在基于正则表达式的拆分功能。没有在in the tutorial列出,但在the language manual on the wiki列出:

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

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

    【讨论】:

    【解决方案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
      猜你喜欢
      • 2011-12-03
      • 2016-12-20
      • 2020-04-07
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2014-09-01
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多