Apache Hive regexp_extract UDF

时间:2013-01-17 03:26:53

标签: hadoop hive

我在Apache Hive中遇到了一段代码,如regexp_extract(输入,'[0-9] *',0),有人可以向我解释这段代码的作用吗?感谢

3 个答案:

答案 0 :(得分:19)

the Hive manual DDL开始,它返回使用模式提取的字符串。例如regexp_extract('foothebar', 'foo(.*?)(bar)', 2)会返回bar

index参数是捕获组,它是一个可以采用以下值的整数:

  • 0:整场比赛,在我的例子中,它将是foothebar
  • 1:第一组,在我的示例中,它将是the
  • 2:第二组,在我的例子中,它将是bar
  • n:第n组。如果n大于正则表达式中定义的实际组数,则Hive查询将失败。

在您的示例regexp_extract(input, '[0-9]*', 0)中,您正在查找由input标识的列的整个匹配项,并以数值开头。

以下是一些例子:

  • regexp_extract('9eleven', '[0-9]*', 0) - >返回9
  • regexp_extract('9eleven', '[0-9]*', 1) - >查询失败
  • regexp_extract('911test', '[0-9]*', 0) - >返回911
  • regexp_extract('911test', '[0-9]*', 1) - >查询失败
  • regexp_extract('eleven', '[0-9]*', 0) - >返回空字符串
  • regexp_extract('test911', '[0-9]*', 0) - >返回空字符串

答案 1 :(得分:3)

以上答案部分不正确。 regexp_extract('test911', '[0-9]*', 0)肯定会返回911.我们从不在[0-9]*

之前指定字符串的开头

答案 2 :(得分:-1)

正则表达式regexp_extract(input, '[0-9]*', 0)将给出输入字符串中的所有起始数字。

例如

select regexp_extract('442323test41234', '[0-9]*', 0) ==> 442323
select regexp_extract('44test41234', '[0-9]*', 0) ==> 44
select regexp_extract('test41234', '[0-9]*', 0) ==> 1

但这不是提取起始数字的最佳方法。以下是更具可读性的格式:

select regexp_extract(input, '^([0-9]+).*?$', 1)

上面的正则表达式说,列出字符串中所有开头的数字,而忽略其余的数字。