regexp_extract在Hive中查找值

时间:2015-11-01 20:17:19

标签: sql regex hadoop hive

我是/的新用户,需要在application/motorola products/routers 上拆分列,然后选择第3个值。例如,来自

routers

希望获得motorola products。如果没有第3个值,那么我们需要回到第2个值,即(.*?\/)(.*?\/)(.*?)(\/.*\/) 。我尝试了以下正则表达式模式,但它不起作用:

{{1}}

3 个答案:

答案 0 :(得分:0)

您说单个字符是可选的。给.一个quantifier *+。我认为这个正则表达式实际上会更好:

(?:([^\/]+?\/)([^\/]+?)\/([^\/]*)|([^\/]+?\/)([^\/]+))

演示:https://regex101.com/r/dX6uQ9/2

我还没有合作/没有hive所以无法证实这会有效,但我认为它应该让你更接近方向。

答案 1 :(得分:0)

听起来你只想要 last 值,这意味着最后/之后的任何内容。正则表达式为[^/]+$

select regexp_extract(name, '[^/]+$', 0) from dummy;

如果有两个斜杠,则获得第三个值。如果有五个斜杠,则获得第六个值。

如果你想停止在第三个值,即使有两个以上的斜杠,你可以使用它:

select regexp_extract(name, '^(?:[^/]+/){0,2}([^/]+)', 1) from dummy;

索引参数1使其提取第一个捕获组([^/]+)中匹配的内容。

注意:我假设完整的值不会开始结束并带有斜杠,例如/motorola products/routersapplication/motorola products/。< / p>

答案 2 :(得分:0)

select split('application/motorola products/routers','/')[size(split('application/motorola products/routers','/'))-1]