sqoop从hive同步数据到mysql出错!Can't parse input data: '0'

此次踩坑背景:

工作中使用sqoop同步工具从hive同步数据到mysql中时,遇到报错信息如下。
前提:本次出错由于一个字段是用户输入的文本数据,可能包含未知的特殊字符导致本次同步时出错。

Error: java.io.IOException: Can't export data, please check failed map task logs
Caused by: java.lang.RuntimeException: Can't parse input data: '0'

第一步:google搜“Can’t parse input data: ‘0’”

收获的信息大致都是:
数据中的分隔符与sqoop配置的分隔符不一致导致解析出错。

第二步:检查本次sqoop同步任务配置以及同步数据

同步数据:

  • 本次同步的数据格式为hive默认的textfile格式,列默认分隔符为’\0001’,行默认分隔符为’\n’

同步任务配置:

  • 列分割符为’\0001’,行分隔符为’\n’

显然不是同步任务配置与数据本身分隔符不一致导致的。

第三步:找到出错分区数据,手动排错

通过具体报错信息,找到了具体的错误数据分区,由于分区数据不多,决定把数据从hdfs上下载下来,排错。在没有google到跟自己类似的错误情况只能这样干了!

第四步:果然被我发现了你!!

在这里插入图片描述
<0x01>:代表’\0001’
<0x00>:那你是什么玩意???

经我翻阅ASCII编码表终于找到的答案!!哈哈哈!!
在这里插入图片描述
<0x00>原来是空字符的含义哈,但是这里的null和我们数据中的null值不一样,hive表中null值是用’\N’表示。

发现问题之后,接下来就是把这个特殊玩意给我替换掉,用的也是我们经常会用到的函数,regexp_replace()。

具体操作:regexp_replace(col1,’\\0000’,’’) as col1。这里需要使用’\\'进行转义一次哦!!

到这里,我们就把这个问题解决了!!
希望这篇文章可以帮到遇到这个问题绞尽脑汁的你!!

你可能感兴趣的:(sqoop)