天天看點

Hive split分割後擷取最後一段

-----------------------------------------

如果隻看解決方法,直接看最後。。。

-----------------------------------------

今兒碰到了這麼種情況,表中有一個字段,格式是這樣的

a\b\c
a\b
a\b\c\d      

是根據符号 '\' 隔開的,現在需要取每個的最後一段,先做個split,字段名稱為TXTMD

select split(TXTMD,'\\\\') as txtmd from xx_table      

此時擷取到的是一個數組,如果字段為  a\b\c\d,那麼得到的結果為 [a,b,c,d]

那麼現在我們如何來拿到最後一段呢,首先想到根據索引來取,但是字段内容在split後并不知道有幾段,是以首先想到了size()函數擷取split後的size,如下

select size(split(TXTMD,'\\\\')) as size from xx_table      

如果TXTMD='a\b\c\d',那麼得到的結果為 4 ,現在可以擷取到最後一段的索引了,就想着根據索引求了,如下

select split(TXTMD,'\\\\')[size(split(TXTMD,'\\\\'))-1] as last from xx_table      

幻想着可以的樣子,然而會報錯

後來腦洞大開,想着完全可以先把這個字元串翻轉過來(reverse),split後直接去索引為0的,然後再翻轉回去,have a try.....

select reverse(split(reverse(TXTMD),'\\\\')[0]) as size from xx_table