FAQ-SQOOP特殊字符处理

如果源数据中存在特殊字符,当使用SQOOP将数据导入HDFS/Hive后,可能会导致字段错位、串行或字段类型转换失败等报错;

问题原因:源数据中有特殊字符,比如\t \n等,如果如果导出数据到HDFS,存储为TEXT格式,而TEXT格式是以\n进行换行的,所以可能导致查询出来的数据行数变多。

解决方案:

  1、在SQOOP层面解决,在数据库传输的节点中加入以下参数:

--hive-drop-import-delims  :默认剔除同步过来数据中包含的 '\r'  '\n'  '\01'
--hive-delims-replacement '\t':默认替换同步过来数据中包含的 '\r'  '\n'  '\01''\t'

eg:
cmd模式:

sqoop import --connect jdbc:mysql://hostname:3306/dbname --user username --password  passwd    --hive-delims-replacement '\t' --query "select * from tablename where $CONDITIONS" --target-dir /user/warehouse/hive.db/xxx
表单模式:在“更多参数”中加入:--hive-drop-import-delims 或者 --hive-delims-replacement '\t'

  2、改变数据传输的文件格式 选取能够兼容特殊符号的文件格式,比如parquet