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