приведение массива <struct <ключ: строка, значение: массив <string>>> в карту <строка, массив <string>> - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть таблица, как

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

В Presto я использую

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, я думаю, это потому, что один ключ имеет много значений, и они разносятся по разным строкам в улье. Есть ли способ сделать запрос улья похожим на запрос preto?

...