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

如何在Hive 1.2.1中通过select语句导出带引号的标准CSV文件

问题原因

Hive表配置的OpenCSVSerde仅作用于Hive读写HDFS底层存储文件的序列化/反序列化过程,不会影响Hive CLI直接执行SELECT语句的输出格式:CLI默认使用制表符作为字段分隔符,且不会给字段加引号,因此会出现你观察到的差异。

可用于Hive 1.2.1的实现方法

方法1:手动拼接输出字段(适合字段少的简单场景)

直接在SELECT语句中通过concat函数拼接出符合要求的CSV格式,无需额外配置:

SELECT concat('"', id, '","', name, '","', value, '","', dt, '"') FROM tst.t_serde;

对应的导出命令:

hive -e "SET hive.mapred.mode=nonstrict; SET hive.cli.print.header=false; SELECT concat('\"', id, '\",\"', name, '\",\"', value, '\",\"', dt, '\"') FROM tst.t_serde;" > t_serde_2.csv

注意:如果字段值本身包含双引号、逗号等特殊字符,需要额外添加转义逻辑,适合数据格式简单的场景。

方法2:通过INSERT写入本地目录(推荐,支持自动转义特殊字符)

利用Hive写入目录时可以自定义SerDe的特性,直接将查询结果用和表相同的CSV SerDe写入本地目录,输出格式和HDFS底层文件完全一致:

-- 执行Hive SQL写入本地目录
SET hive.exec.compress.output=false;
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/serde_csv_output'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
    "separatorChar" = ",",
    "quoteChar" = "\""
)
STORED AS TEXTFILE
SELECT id, name, value, dt FROM tst.t_serde;

写入完成后,直接读取本地目录下的文件即可得到目标格式的CSV:

cat /tmp/serde_csv_output/* > t_serde_2.csv

该方法会自动处理字段内的特殊字符转义,适合字段多、数据格式复杂的生产场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:05