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 的一些细节。


 

 

 

posted @ 2022-03-02 12:54  晓枫的春天  阅读(923)  评论(0编辑  收藏  举报