You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hive SQL中提取数组元素且结果保留单行(不使用LATERAL VIEW EXPLODE)

Hive SQL:将数组列转为单行带引号分隔字符串(不拆分多行)

嘿,这需求我熟!你要把数组类型的Answer列转换成带双引号的逗号分隔字符串,还得保持每行对应原id,不拆分成多行对吧?给你两个靠谱的方案:

方案一:用transform() + concat_ws()(推荐,Hive 2.3.0+支持)

这个方法最稳妥,能精准控制每个元素的格式:

SELECT 
    id,
    concat_ws(',', transform(Answer, element -> concat('"', element, '"'))) AS Answer
FROM your_table;

原理说明:

  • transform(Answer, element -> concat('"', element, '"')):遍历Answer数组里的每一个元素,给每个元素前后加上双引号,比如把数组里的A变成"A"。
  • concat_ws(',', ...):把处理后的带引号元素用逗号连接成一个完整的字符串,完美匹配你要的输出格式。

方案二:用regexp_replace()(兼容旧版Hive)

如果你的Hive版本比较老,不支持Lambda表达式的transform(),可以直接利用数组的默认字符串格式做正则替换:

SELECT 
    id,
    regexp_replace(cast(Answer as string), '\\[|\\]', '') AS Answer
FROM your_table;

注意:这个方法的前提是数组元素本身不包含方括号[],如果有特殊字符的话可能会出错,所以优先用方案一。

用这两个方案跑出来的结果就完全符合你的期望啦:

idAnswer
123"A","B","C","D","E"
456"A","B","C","E"
789"A","B","C"

内容的提问来源于stack exchange,提问作者Heemama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:34