sqoop把mysql数据倒入hdfs给每个字段增加引号
最近需要用sqoop把mysql数据倒入到hdfs文件,但是倒入到hdfs文件之后和mysql表到总条数对比发现,hdfs上保存的csv文件比mysql的表数据要多很多,而且文件都是5个G的,打开非常有困难,最后排查数据库字段,发现有一个字段里面数据内容是这样的
分隔符用的是\t 分割
"河北省保定市 河北省保定市 河北省保定市 河北省保定市 河北省保定市 河北省保定市"
也就是说这一个字段被\t 给分割了,所以会出现导出到hdfs文件上到内容要比mysql表到数据要多很多。
解决方法
1要么对数据库里面的数据进行清洗
2要么就是用引号把数据的每个字段给引起来
下面是给每个字段加引号的语句
sqoop import --connect "jdbc:mysql://192.168.28.220:3306/haiguan_data?dontTrackOpenResources=true&useCursorFetch=true" --enclosed-by '\"' --username root --password root --table r2000 --driver com.mysql.jdbc.Driver --target-dir /input/haiguan --fields-terminated-by '\t' -m 1
--enclosed-by '\"' 这个就是给每个字段值加上引号
--escaped-by \\ --enclosed-by '\"'
以\作为转义字符 用引号包围字段值