Ошибка говорит о том, что вы не можете иметь сложные типы данных (например, массив, структура, карта) в качестве ключа для отображения.
И это имеет смысл правильно. ключ должен быть только одно значение, поэтому он должен быть примитивным (т. е. String, Int, BigInt)
Тем не менее, ваш код пытается поместить ключ в качестве массива, и поэтому ошибка. Что вам нужно сделать, это сначала взорвать массив, а затем попытаться получить ключ и значение, чтобы сформировать карту.
Это может сработать.
создать таблицу
create table temp.test_struct (test array<struct<key:string,value:array<string>>>)
Введите значения
insert into temp.test_struct
select array(
NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
) from (select 'a') x
Конвертировать массив структур на карту
select test, map(t1.key, t1.value) map_col
from
temp.test_struct
lateral view inline(test) t1