Arrays 将配置单元阵列列转换为映射列
我有一个包含两个数组列的配置单元表,如下所示:Arrays 将配置单元阵列列转换为映射列,arrays,hadoop,hive,Arrays,Hadoop,Hive,我有一个包含两个数组列的配置单元表,如下所示: col1 col2 a,b,c 1,2,3 col {a->1,b->2,c->3} 我想将这两列转换为map列,如下所示: col1 col2 a,b,c 1,2,3 col {a->1,b->2,c->3} 如何操作?分解数组,使用':'作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用s
col1 col2
a,b,c 1,2,3
col
{a->1,b->2,c->3}
我想将这两列转换为map列,如下所示:
col1 col2
a,b,c 1,2,3
col
{a->1,b->2,c->3}
如何操作?分解数组,使用
':'
作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用str\u to\u 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,':',col2[c1.i] )))) as map_col
from test_map t
lateral view posexplode(col1) c1 as i,col
结果:
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
分解数组,使用
':'
作为分隔符连接映射元素,将元素收集到数组中,将数组连接到逗号分隔的字符串中,使用str\u to\u 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,':',col2[c1.i] )))) as map_col
from test_map t
lateral view posexplode(col1) c1 as i,col
结果:
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