我有一个包含两个数组列的配置单元表,如下所示:
col1 col2
a,b,c 1,2,3
我要将这两列转换为map列,如下所示:
col
{a->1,b->2,c->3}
如何做到?
答案 0 :(得分:0)
展开数组,使用select
作为分隔符来连接地图元素,将元素收集到数组中,将数组连接为逗号分隔的字符串,使用':'
函数来获取地图:
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"}