如何在Hive中将两列拼接为Map并按id主键聚合
Hive按主键聚合并转换为Map类型的实现方案
你可以根据你使用的Hive版本选择对应实现方式:
- 方案1:Hive 2.3.0及以上版本,直接使用内置聚合函数
map_agg,语法最简洁,性能最优:
SELECT id, map_agg(locale, value) AS locale_value_map -- 此处替换为你的实际表名 FROM your_table_name GROUP BY id;
执行后返回的locale_value_map字段就是你需要的Map<locale, value>结构,直接匹配预期输出格式。
- 方案2:Hive 2.3.0以下版本,使用
collect_list+str_to_map组合实现兼容:
SELECT id, str_to_map( concat_ws(',', collect_list(concat_ws(':', locale, value))) ) AS locale_value_map -- 此处替换为你的实际表名 FROM your_table_name GROUP BY id;
注意:如果你的
locale或value字段本身包含冒号:、逗号,的特殊字符,请先对特殊字符做转义处理,避免str_to_map拆分映射关系出错。
内容的提问来源于stack exchange,提问作者ddbb
相关产品推荐
相关产品推荐

