mysql导出csv中字段里有换行符的处理办法及hive导出处理办法
mysql命令行导出csv文件时,若字段里有换行符,输出的文件就会在换行符前面加一个反斜杠,这种非标准的csv导入到excel也乱行了。网上查了好多文章,都建议在相应的字段上加replace函数,把换行符替换成特殊标记,这显然是非常笨的做法,无法通用,特别是无法预测哪个字段会有换行符的。所以我的做法是:
1、导出csv时,给字符型字段值加上双引号
mysql --defaults-extra-file=~/.10.16.32.9.my.cnf -h 10.16.32.9 -P 13306 -e "select t.id,t.code,t.partner_type_id,t.path,t.customer_id,t.name,t.org_id,t.default_out_account_num,t.default_out_account,t.default_bank,t.project_register_way,t.credit_code,t.sftp_user,t.sftp_pwd,t.push_result_msg,t.is_push_voucher,t.deleted,t.create_time,t.update_time,t.xg_id,t.dept_id,t.act_status,t.finance_system_code,t.enabled,t.apply_emp,t.apply_dept,t.apply_time,t.created_by,t.updated_by,t.bear_all,t.payee_type,t.manager,t.image_url,t.is_virtual,t.crm_sale_org_id from loan.loan_partner t INTO OUTFILE '/tmp/loan_partner.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\n'"
2、用sed把Csv中“+换行符”替换成“换行符”
sed -i "s/\\\\$/\n/g" loan_partner.csv
这时,再用excel打开,就不会有乱行的问题。
对这个标准的csv如果要导入出hive中,再参考我另一篇就可以解决了:
https://blog.csdn.net/weixin_45357522/article/details/150390071
另外,hive在csv标准方面兼容性不好,如果字段里有逗号,或双引号,就得前面加反斜杠转义,而标准csv字段值用双引号括起来之后,如果字段里有双引号则在双引号前面再加一个双引号就可以了,逗号不需要转义了。