如何编写Impala查询获取含map类型列的指定结果集?
Impala查询Map类型并返回目标格式结果
因为Impala查询结果仅支持标量类型,无法直接返回完整的map结构,我们可以通过字符串拼接的方式生成符合要求的格式:
场景1:每个name对应的desc仅含单个键值对
直接通过map_keys和map_values提取键值,再拼接成目标字符串:
SELECT name, CONCAT('{', map_keys(desc)[0], ',"', map_values(desc)[0], '"}') AS desc FROM details;
场景2:desc包含多个键值对
先通过LATERAL VIEW EXPLODE解包map,再用STRING_AGG(Impala 2.10及以上版本支持)拼接所有键值对,最后包裹成目标格式:
SELECT name, CONCAT('{', STRING_AGG(CONCAT(map_col.key, ',"', map_col.value, '"'), ', '), '}') AS desc FROM details, LATERAL VIEW EXPLODE(desc) t AS map_col GROUP BY name;
这两种方式都能让查询结果返回你需要的name和类似{1,"home"}格式的desc列,可直接在Java程序中执行获取结果。
内容的提问来源于stack exchange,提问作者fahd
相关产品推荐
相关产品推荐

