将array <struct <key:string,value:array <string >>>转换为map <string,array <string >>

时间:2018-11-05 18:26:38

标签: sql hive hiveql presto

我有一张类似的桌子

name            string                                      
one_key_value   array<struct<key:string,value:array<string>>                    
two_key_value   array<struct<key:string,value:array<string>>

并希望将其转换为

name            string                                      
one_key_value   map<string,array<string>>                       
two_key_value   map<string,array<string>>

我先用

SELECT name, 
MAP(TRANSFORM(one_key_value, kv -> kv.key), TRANSFORM(one_key_value, kv -> kv.value)) AS one_key_value, 
MAP(TRANSFORM(two_key_value, kv -> kv.key), TRANSFORM(two_key_value, kv -> kv.value)) AS two_key_value
FROM table_a;  

在蜂巢中,我使用

SELECT name,
map(k1,v1) AS one_key_value, 
map(k2,v2) AS one_key_value
FROM table_a 
lateral view inline(one_key_value) t1 as k1,v1
lateral view inline(two_key_value) t2 as k2,v2;

与presto相比,配置单元中的计数要高得多,我想这是因为一个键具有很多值,并且它们正在配置单元中分解为不同的行。有没有一种方法可以使配置单元查询类似于presto查询。

0 个答案:

没有答案