如何在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;
注意:这个方法的前提是数组元素本身不包含方括号
[],如果有特殊字符的话可能会出错,所以优先用方案一。
用这两个方案跑出来的结果就完全符合你的期望啦:
| id | Answer |
|---|---|
| 123 | "A","B","C","D","E" |
| 456 | "A","B","C","E" |
| 789 | "A","B","C" |
内容的提问来源于stack exchange,提问作者Heemama
相关产品推荐
相关产品推荐

