配置单元将数组 <map<string, string>> 转换为字符串

hive convert array<map<string, string>> to string

我在 hive table 中有一个列,类型是 array<map<string, string>>,我正在努力如何使用 hql 将此列转换为 string

我在这里 Convert Map<string,string> to just string in hive 找到了 post 来将 map<string, string> 转换为 string。但是,我仍然无法将 array<map<string, string>> 转换为 string.

在您链接到的原始答案的基础上,您可以首先使用 posexplode 将数组分解为单独的地图以维护位置列。然后你可以使用原始post中的方法,但额外按位置列分组,将每个映射转换为字符串。然后你将你的地图收集到最终的字符串中。这是一个例子:

with test_data as (
select stack(2,
             1, array(map('m1key1', 'm1val1', 'm1key2', 'm1val2'), map('m2key1', 'm2val1', 'm2key2', 'm2val2')),
             2, array(map('m1key1', 'm1val1', 'm1key2', 'm1val2'), map('m2key1', 'm2val1', 'm2key2', 'm2val2'))
            ) as (id, arr_col)
),
map_data as (
select id, arr_col as original_arr, m.pos as map_num, m.val as map_col
  from test_data d
       lateral view posexplode(arr_col) m as pos, val
),
map_strs as (
select id, original_arr, map_num,
       concat('{',concat_ws(',',collect_set(concat(m.key,':', m.val))),'}') map_str
  from map_data d
       lateral view explode(map_col) m as key, val
 group by id, original_arr, map_num
 )
 select id, original_arr, concat('[', concat_ws(',', collect_set(map_str)), ']') as arr_str
 from map_strs
 group by id, original_arr;