我有一个类似
的表格name string
address string
timezone string
one_key_value array<struct<key:string,value:array<string>>
two_key_value array<struct<key:string,value:array<string>>
并希望将其转换为
name string
address string
timezone string
one_key_value map<string,array<string>>
two_key_value map<string,array<string>>
使用presto。有lateral view inline
,但实际上并没有真正起作用。我该怎么办?
答案 0 :(得分:2)
根据提供的信息,您基本上需要两件事:
map_from_entries(one_key_value)
(文档:https://prestosql.io/docs/current/functions/map.html#map_from_entries)答案 1 :(得分:1)
我还没有检验过思想,但是下面的表达应该有所帮助:
map( transform(one_key_value, e -> e.key), transform(one_key_value, e -> e.value))
map( transform(two_key_value, e -> e.key), transform(two_key_value, e -> e.value))
根据Presto 0.175 docs的AS:
map(array,array)→map返回使用 给定键/值数组。
SELECT映射(ARRAY [1,3],ARRAY [2,4]); -{1-> 2,3-> 4}
我们可以使用array transform function从输入字段(array<struct<key:string,value:array<string>>
)构建键和值的数组
transform(array,function)→ARRAY返回一个数组 将函数应用于数组的每个元素