presto:cast数组< struct< key:string,value:array< string>>>到map< string,array< string>>

zbsbpyhn  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(1239)

我有一张像这样的table

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 但它在普雷斯托不起作用。我该怎么做?

qqrboqgw

qqrboqgw1#

我没有试过思考,但下面的表达应该会有所帮助:

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文件:
Map(数组,数组)→ map返回使用给定的键/值数组创建的Map。
选择Map(数组[1,3],数组[2,4]);--{1 -> 2, 3 -> 4}
我们可以使用数组转换函数从输入字段( array<struct<key:string,value:array<string>> )
变换(数组、函数)→ 数组返回一个数组,该数组将函数应用于数组的每个元素

f0brbegy

f0brbegy2#

根据提供的信息,您基本上需要两件事:
从maven central/github升级到最近的版本,或者从https://www.starburstdata.com/starburst-presto-sql/ (免责声明:我来自星暴)。0.175真的有点过时了。
使用 map_from_entries(one_key_value) (文件:https://prestosql.io/docs/current/functions/map.html#map_from_entries)

相关问题