首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hive :如何将字符串转换为数组的数组

Hive :如何将字符串转换为数组的数组
EN

Stack Overflow用户
提问于 2021-01-22 07:18:36
回答 1查看 269关注 0票数 1

我有一个配置单元列值存储为字符串

代码语言:javascript
运行
复制
[[1,2],[3,4,8],[5,6,7,9]]

我需要找出每个内部数组的长度。我该怎么做呢?

基本上,我需要一个查询来汇总每个内部数组的大小。如果这一列被存储为数组的数组,我会这样做

代码语言:javascript
运行
复制
select sum(size(innerArray)) from myTab lateral view explode (mycol) arr as innerArray;

但是现在,当我尝试上面的方法时,我得到了

代码语言:javascript
运行
复制
FAILED: UDFArgumentException explode() takes an array or a map as a parameter
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 18:19:23

因为您的初始数组不是实数组,而是字符串,所以您需要对其进行解析和分解:

代码语言:javascript
运行
复制
with mytable as(
select '[[1,2],[3,4,8],[5,6,7,9]]' as mycol
)

select mycol as original_string,
       innerArray_str, 
       --split inner array and get size
       size(split(innerArray_str,',')) inner_array_size
from mytable
    --explode upper array
    --replace `],` (allow spaces before comma) with `,,,` and remove all `[` and `]`, split using ,,, as a delimiter 
     lateral view outer explode(split(regexp_replace(regexp_replace(mycol,'\\] *,',',,,'),'\\[|\\]',''),',,,') )e as innerArray_str 

结果:

代码语言:javascript
运行
复制
original_string             innerarray_str  inner_array_size
[[1,2],[3,4,8],[5,6,7,9]]   1,2             2
[[1,2],[3,4,8],[5,6,7,9]]   3,4,8           3
[[1,2],[3,4,8],[5,6,7,9]]   5,6,7,9         4

现在您可以添加sum()group by

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65837187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档