【发布时间】:2020-07-15 23:37:38
【问题描述】:
我有一个蜂巢表
create table tab(
col1 map<string,array<string>>)
看起来像
select key,value from tab lateral view explode(col1) e as key, value;
key | value
-------------------
a | ['1','2','3']
b | ['4','5','6']
a | ['7','8','9']
b | ['12',11','12']
现在我想获得每个键的值大小的总和。即我想看到这样的东西
{'a':6,'b':6}
我知道我可以做这样的事情
select key,sum(size(value)) from tab lateral view explode(col1) e as key, value group by key;
它给了我
a 6
b 6
但我希望上述结果出现在一个映射中,因为我将使用它在我的目标表中插入语句,该目标表需要 map<string,int>
我怎样才能做到这一点?
我试过了
select map(key,sum(size(value))) from tab lateral view explode(col1) e as key, value group by key;
但显然它只是给了我
{'a': 6}
{'b': 6}
【问题讨论】:
-
不确定您还需要什么。最终查询是正确的,您得到
map<string,int> -
{'a': 6}只是 Hive 在 shell 中表示地图的方式,您的查询结果为map<string, bigint> -
我的错误。我更新了帖子。我希望最终结果为
{'a':6,'b':6} -
使用砖房收集 UDAF:stackoverflow.com/a/62156562/2700344
标签: java sql hive aggregate-functions hiveql