AWS Athena中的unnest用法

博客主要围绕Athena数据库,介绍了使用SQL处理特殊数据结构的方法。针对arrays of array结构,提出取内部中括号中第三个数字并求平均值的问题及解决办法;还针对maps of array结构,提出求特定值总和的问题,给出类似的解决代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、处理 arrays of array 结构

提出问题

在数据库中字段reward的数据格式如下:

[[1,0,200],[5,0,300],[1,0,400]]
varchar格式,我希望取内部每个 中括号 中的第三个数字,并求平均值

解决方法

with  t1 as(
select '[[1,0,200],[5,0,300],[1,0,400]]' as reward
) ,t2 as (
select item[3] as reward_num
from t1 
cross join unnest(cast(json_parse(reward) as array(array(integer)))) as t(item)
)
select avg(reward_num) as avg_reward_num
from t2

详细解释

  • json_parse(reward)varchar类型转换为json类型
  • unnest将横排的reward转化成了竖排,即在t2执行完后,得到的数据如下:
reward
[1,0,200]
[5,0,300]
[1,0,400]

二、处理 maps of array 结构

提出问题

在数据库中遇到如下格式字段:

[{"type":0,"num":10},{"type":1,"num":20},{"type":0,"num":30}]

varchar格式
我们希望求type为0的总num

解决问题

方法与一中的类似,代码如下:

with t1 as (
select '[{"type":0,"num":10},{"type":1,"num":20},{"type":0,"num":30}]' as reward
),t2 as (
select cast(item['type'] as varchar) as type,cast(item['num'] as varchar) as num
from t1
cross join unnest(cast(json_parse(reward) as array(map(varchar,json)))) as t(item)
)
select sum(cast(num as integer)) as sum_num
from t2
where type='0'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值