преобразование столбцов массива кустов в столбец карты - PullRequest
1 голос
/ 28 июня 2019

У меня есть таблица кустов с двумя столбцами массива следующим образом:

 col1        col2
a,b,c        1,2,3

Я хочу преобразовать эти два столбца в столбец карты следующим образом:

    col
  {a->1,b->2,c->3}

Как это можно сделать?

1 Ответ

0 голосов
/ 28 июня 2019

Разнесение массивов, объединение элементов карты с использованием ':' в качестве разделителя, сбор элементов в массив, объединение массива в строку с разделителями-запятыми, использование функции str_to_map для получения карты:

create table test_map as 
select 
array('a','b','c') col1, array(1,2,3) as col2
;

select str_to_map(concat_ws(',',collect_set(concat(c1.col,':',c2.col)))) as map_col
 from test_map t 
      lateral view posexplode(col1) c1 as i,col
      lateral view posexplode(col2) c2 as i,col
where c1.i=c2.i

Результат:

map_col 
{"a":"1","b":"2","c":"3"}   

Если количество элементов массива ограничено, вы можете обойтись без разнесения:

select str_to_map(concat(col1[0],':',col2[0],',',
                         col1[1],':',col2[1],',',
                         col1[2],':',col2[2])
                 ) as map_col
 from test_map t 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...