在 presto 中提取数组数组

extract array of arrays in presto

我在 Athena (presto) 中有一个 table,只有一个名为 individuals 的列,这是 then 列的类型:

array(row(individual_id varchar, ids array(row(type varchar, value varchar, score integer))))

我想从 ids 和 return 中提取 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}]}]

我想 return

ids
[efd3, NpS, 178, NuHV]

我尝试了多种解决方案,例如

select * from "test"
CROSS JOIN UNNEST(individuals.ids.value) AS t(i)

但总是return

 Expression individuals is not of type ROW
select
  array_agg(ids.value)
from test
cross join unnest(test.individuals) t(ind)
cross join unnest(ind.ids) t(ids)

结果:

[efd3, NpS, 178, NuHV]

这将 return 所有 id 值作为一行,这可能是也可能不是你想要的

如果你想 return 由 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