将Map <string,string>转换为蜂巢中的仅字符串

问题描述

任何人都可以帮助我,如何在蜂巢中将map<string,string>类型转换为string数据类型?

解决方法

分解图,然后将键与值连接在一起,将所有“键:值”对收集到数组中,并使用concat_ws连接数组。

演示:

with test_data as (
select stack(2,1,map('key1','val1','key2','val2'),2,'val2')
            ) as (id,map_col)
)

select id,map_col as original_map,concat_ws(',',collect_set(concat(m.key,':',m.val))) map_str
  from test_data d
       lateral view explode(map_col) m as key,val
 group by id,map_col

结果:

id   original_map                   map_str
1   {"key1":"val1","key2":"val2"}   key1:val1,key2:val2
2   {"key1":"val1",key2:val2

连接时可以使用其他一些定界符。