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。這裏需要使用’\\'進行轉義一次哦!!

到這裏,我們就把這個問題解決了!!
希望這篇文章可以幫到遇到這個問題絞盡腦汁的你!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章