使用HiveQL正则表达式在一段时间之前提取所有字符?

时间:2016-08-29 22:50:27

标签: sql regex hive hiveql

我有一张表格如下:

bl.ah
foo.bar
bar.fight

我想使用HiveQL的regexp_extract返回

bl
foo
bar

1 个答案:

答案 0 :(得分:2)

给出关于 regexp_extract docs数据:

regexp_extract(string subject, string pattern, int index)

  

返回使用模式提取的字符串。例如,regexp_extract('foothebar','foo(。*?)(bar)',2)返回'bar'。请注意,在使用预定义的字符类时需要注意:使用'\ s'作为第二个参数将匹配字母s; '\ s'是匹配空格等的必要条件.'index'参数是Java regex Matcher group()方法索引。有关'index'或Java regex group()方法的更多信息,请参阅docs / api / java / util / regex / Matcher.html。

因此,如果您有一个包含单个列的表(我们将其称为description示例),您应该能够按照以下方式使用regexp_extract在之前获取数据 ,如果存在,或者在没有句号的情况下整个字符串:

regexp_extract(description,'^([^\.]+)\.?',1)

正则表达式的组件如下:

  • ^字符串开头
  • ([^\.]+)在捕获组中的任何非句号字符一次或多次
  • \.?一段时间或无时间

因为我们感兴趣的字符串部分将位于第一个(也是唯一的)捕获组中,我们通过将index参数传递给 1 来引用它