Struct 在presto中提取数组的数组
我在Athena(presto)中有一个表,其中只有一列名为Struct 在presto中提取数组的数组,struct,presto,amazon-athena,unnest,trino,Struct,Presto,Amazon Athena,Unnest,Trino,我在Athena(presto)中有一个表,其中只有一列名为Persons,这是then列的类型: array(row(individual_id varchar, ids array(row(type varchar, value varchar, score integer)))) 我想从id内部提取value,并将其作为新数组返回。例如: [{individual_id=B1Q, ids=[{type=H, value=efd3, score=1}, {type=K, value=NpS
Persons
,这是then列的类型:
array(row(individual_id varchar, ids array(row(type varchar, value varchar, score integer))))
我想从id
内部提取value
,并将其作为新数组返回。例如:
[{individual_id=B1Q, ids=[{type=H, value=efd3, score=1}, {type=K, value=NpS, score=1}]}, {individual_id=D6n, ids=[{type=A, value=178, score=6}, {type=K, value=NuHV, score=8}]}]
我想回来
ids
[efd3, NpS, 178, NuHV]
我尝试了多种解决方案,比如
select * from "test"
CROSS JOIN UNNEST(individuals.ids.value) AS t(i)
但总是回来
Expression individuals is not of type ROW
结果:
[efd3, NpS, 178, NuHV]
这将返回所有id值作为一行,这可能是您想要的,也可能不是您想要的
如果要按单个id返回单个值的数组,请执行以下操作:
select
ind.individual_id,
array_agg(ids.value)
from test
cross join unnest(test.individuals) t(ind)
cross join unnest(ind.ids) t(ids)
group by
ind.individual_id
select
ind.individual_id,
array_agg(ids.value)
from test
cross join unnest(test.individuals) t(ind)
cross join unnest(ind.ids) t(ids)
group by
ind.individual_id