2016-08-19 50 views
0

我們有這樣的字符串:子字符串的提取物在蜂巢

ABC.XXXXXXX.USD.XX

,任務是提取貨幣(在這種情況下美元)。 選項我想回報廢話:

select distinct 
    r.name 
    ,regexp_extract(r.name,'\.(.{3})\.',1) 
    ,split(r.name,'\.') 
    ,split(r.name,'\.')[2] 
from sales r 

輸出:

ABC.XXXXXXX.USD.XX BC. ["","","","","","","","","","","","",""] <empty> 

怎麼來的?

+1

可能是由於逃逸?嘗試''\\。'':''\\。(。{3})\\。','split(r.name,'\\。') –

回答

0

Hive中的split函數基於正則表達式。看到language manual on the wiki

split(string str, string pat) 
    Split str around pat (pat is a regular expression) 

你指定爲"\.",即解析爲一個單純.,在正則表達式,匹配任何字符,從而一個未定義的轉義序列分隔符,它的每個字符之間拆分,並且還在字符串的開始和結尾。

你需要轉義,可以在一個字符串文字作爲"\\."

0

定義的反斜線點只是把在方括號,如:

split(r.name,'[\.]')[2]