Hive导出SQL查询结果至CSV:如何去除表头与引号?
Hive导出无表头、无引号CSV的解决方法
方法一:调整Hive CLI配置直接导出
在执行导出命令前,先设置两个核心配置项,关闭表头输出和引号包裹:
set hive.cli.print.header=false; set hive.csv.output.quotes=false; !outputformat csv !record /export/homes/ajain/Automation.BankA_QA_23June.csv select * from system.catalog limit 10; !record
配置生效后,导出的CSV将不再包含列名表头,数据也不会被引号包裹。注意:!record命令自带的Saving all output to...提示行仍会存在,若要彻底去掉,可参考下面的方法二。
方法二:用INSERT OVERWRITE直接生成纯净文件(推荐)
这种方式能完全规避额外提示行,精准控制输出格式:
set hive.cli.print.header=false; set hive.csv.output.quotes=false; set hive.exec.compress.output=false; -- 确保输出不压缩 INSERT OVERWRITE LOCAL DIRECTORY '/export/homes/ajain/temp_csv' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE select * from system.catalog limit 10;
执行后,Hive会在指定目录生成多个输出文件(对应每个Map任务),用以下命令合并成单个CSV:
cat /export/homes/ajain/temp_csv/* > /export/homes/ajain/Automation.BankA_QA_23June.csv rm -rf /export/homes/ajain/temp_csv
最终得到的文件就是纯数据内容,逗号分隔,无表头、无引号、无额外提示。
方法三:已导出文件的事后清洗(应急方案)
如果已经得到带冗余内容的文件,直接用Linux命令处理:
# 删除前两行(提示行+表头),同时去掉所有单引号 sed '1,2d;s/'\''//g' /export/homes/ajain/Automation.BankA_QA_23June.csv > /export/homes/ajain/cleaned_output.csv
内容的提问来源于stack exchange,提问作者Ashish Jain
相关产品推荐
相关产品推荐

