将 Map<string,string> 转换为 hive 中的字符串

hus*_*jum 1 sql dictionary hadoop hive hiveql

有人请帮我解决这个问题,我们如何将map<string,string>类型转换为string配置单元中的数据类型?

lef*_*oin 5

分解映射,然后将键与值连接起来,将所有键:值对收集到数组中,并使用 concat_ws 连接数组。

演示:

with test_data as (
select stack(2,
             1, map('key1', 'val1', 'key2', 'val2'),
             2, map('key1', 'val1', 'key2', '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
Run Code Online (Sandbox Code Playgroud)

结果:

id   original_map                   map_str
1   {"key1":"val1","key2":"val2"}   key1:val1,key2:val2
2   {"key1":"val1","key2":"val2"}   key1:val1,key2:val2
Run Code Online (Sandbox Code Playgroud)

连接时您可以使用一些其他分隔符。