Presto: литой массив> в карту - PullRequest
0 голосов
/ 25 октября 2018

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

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, но на самом деле это не работает до.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я не проверял мысль, но приведенное ниже выражение должно помочь:

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

AS за Presto 0,175 документов :

map (массив, массив) → карта Возвращает карту, созданную с использованием заданных массивов ключ / значение.

SELECT map (ARRAY [1,3], ARRAY [2,4]);- {1 -> 2, 3 -> 4}

Мы можем использовать функцию преобразования массива для построения массива ключей и значений из поля ввода (array<struct<key:string,value:array<string>>)

transform (массив, функция) → ARRAY Возвращает массив, который применяет функцию к каждому элементу массива

0 голосов
/ 29 октября 2018

Основываясь на предоставленной информации, вам в основном нужны две вещи:

  1. Обновление до чего-то более позднего - новейшего от Maven Central / Github или поддерживаемого Starburst (и бесплатного) дистрибутива от https://www.starburstdata.com/starburst-presto-sql/ (отказ от ответственности: я из Starburst).0.175 действительно немного устарел.
  2. Использование map_from_entries(one_key_value) (документы: https://prestosql.io/docs/current/functions/map.html#map_from_entries)
...