Struct 在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

我在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, 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