apache配置单元regexp\u extract udf

z4iuyo4d  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(343)

我在apache配置单元中遇到了一段代码,比如regexp\u extract(input,“[0-9]*”,0),有人能给我解释一下这段代码的作用吗?谢谢

zd287kbt

zd287kbt1#

上面的答案部分是错误的。 regexp_extract('test911', '[0-9]*', 0) 一定会还911的。我们以前从未指定字符串的开头 [0-9]*

3duebb1j

3duebb1j2#

正则表达式 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)

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

7gs2gvoe

7gs2gvoe3#

从hive manual ddl中,它返回使用模式提取的字符串。例如。 regexp_extract('foothebar', 'foo(.*?)(bar)', 2) 退货 bar .
这个 index 参数是捕获组,它是一个可以采用以下值的整数:
0:整个比赛,在我的例子中是 foothebar 1:第一组,我的例子是 the 第二组,在我的例子中是 bar 第n组。如果n大于regexp中定义的实际组数,则配置单元查询将失败。
在你的例子中, 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) ->返回空字符串

相关问题