hive 遍歷字符串


需求

遍歷字符串,並以一個字符一行的形式顯示出來,如遍歷"a,b,c,d,e,f"字符串,使其每個字符都生成一行記錄;

思路分析

在hive中可以借助posexplode()函數對數組結構的數據進行(xing)行(hang)轉列,並對數組中每一位都生成一個索引值.該函數強大之處就是為數組中每一位生成索引。進而借助生成的索引,來遍歷字符串。

select posexplode(split('a,b,c,d,e,f', ','));

結果

posexplode生成了pos列及val列,pos列是索引列,這樣就達到了遍歷字符串的結果,將每個字符生成一行記錄。

不過有時候需求側的字符串沒有分隔符,比如"abcdef"這樣的串,則比較麻煩,生成索引如下:
select 'abcdef' as str,             --遍歷的字符串
       pos,                         --索引
       substr("abcdef", pos + 1, 1),--獲取字符串中索引位置的值
       substr("abcdef", 0, pos + 1) --從起始位置開始到當前位置的字符串
from (select posexplode(split(space(length("abcdef") - 1), ' '))) t

結果

 

 總結

遍歷字符串其實是借助 posexplode 函數生成每個字符的索引打散每個字符實現遍歷字符串的效果的。可以研究一下 posexplode 的一些細節。

 
        

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM