sqoop import --hive-import --hive-overwrite --connect jdbc:oracle:thin:@192.168.92.136:1521:cyporcl --username ODS --password 'od154DS$!(' -m 1 --hive-database ODS --table Q_TRA_DISPUTESTATUS --fields-terminated-by '\001' --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' --map-column-java DISPUTERESULT=String
DISPUTERESULT 这个字段是Oracleclob 类型的,里面有回车, 加载到hive 里面导致 记录增多。
--map-column-java和--map-column-hive两个参数都要显示给出;还需要设置--hive-drop-import-delims这样才能顺利导出数据。
.导入的列有换行符如何解决
本以为万事大吉,万万没想到导入的列有nclob类型,里面存储了一篇篇文章,势必有着换行符。果不其然,hive查询数据全部错乱, 查询资料发现--hive-delims-replacement(替换/n,/r等符号用你指定的字符)和--hive-drop-import-delims参数。可添加上去发现并没有什么卵用,没有起作用。百度goole很久,终于发现一篇帖子,http://stackoverflow.com/questions/28076200/hive-drop-import-delims-not-removing-newline-while-using-hcatalog-in-sqoop
意思是要用--map-column-java参数来显示指定列为String类型。我的解决方案为 --map-column-java 我的CLOB列=String 果然,问题解决,换行符全部被去掉。不过听说改变存储格式 或许也可以避免这个问题,希望有着经验的大神来回答一下。总结下来就这么多,希望能帮助大家