Athena 聚合列表 struct string 字符串到字符串列表

Athena aggregate list struct string string to string list

我有一个 array<struct<string,string>> 类型的聚合数组,我想将其转换为 array<struct<string,array<string>>>

更准确地说,我有一个这样的列表

[{'a', 'b'}, {'a', 'c'}, {'d', 'e'}]

我想把它聚合起来

[{'a', ['b', 'c']}, {'d', ['e']}]

如何在 Athena 中将其转换为那样?

函数 multimap_from_entries 正是您所需要的。

查看函数的doc

编辑:

虽然 aws 决定更新 presto :-),但这里有一个解决方法:

SELECT map_filter(reduce(array[cast(('a', 'b') AS row(one varchar, two varchar)),
               cast(('a', 'c') AS row(one varchar, two varchar)),
               cast(('d', 'e') AS row(one varchar, two varchar))],
              map(array[cast('' as varchar)], array[array[cast('' as varchar)]]), 
              (s,x)-> if(s[x.one] is null, map_concat(s,map(array[x.one], array[array[x.two]])),
                         map_concat(s,map(array[x.one], array[s[x.one] || array[x.two]])))
              , s->s), (k,v)->k <> '')
-- {a=[b, c], d=[e]}

想法是遍历数组并通过插入新的键、值对(如果键是新的)或使用新值扩展 value-array 来构造映射。