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