簡體   English   中英

regexp_extract 在 Hive 中查找值

[英]regexp_extract to find the value in Hive

我是regexp_extract ,需要在/上拆分列,然后選擇第三個值。 例如,從

application/motorola products/routers 

想拿routers 如果沒有第三個值,那么我們需要回退到第二個值,這將是motorola products 我嘗試了以下正則表達式模式,但它不起作用:

(.*?\/)(.*?\/)(.*?)(\/.*\/)

您是說單個字符是可選的。 . 量詞*+ 我認為這個正則表達式實際上會更好:

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

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

我沒有和/沒有hive一起工作,所以不能確認這會起作用,但我認為它應該讓你走得更近。

聽起來您只想要最后一個值,即最后一個/之后的值。 正則表達式為[^/]+$

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

如果有兩個斜杠,您將獲得第三個值。 如果有五個斜線,您將獲得第六個值。

如果你想在第三個值處停止,即使有兩個以上的斜杠,你可以使用這個:

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

索引參數1使其提取第一個捕獲組([^/]+)匹配的內容。

注意:我假設完整的值不會以斜線開頭結尾,例如/motorola products/routersapplication/motorola products/

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM