sqoop mysql導入hive 數值類型變成null的問題分析


問題描述:mysql通過sqoop導入到hive表中,發現有個別數據類型為int或tinyint的列導入后數據為null。設置各種行分隔符,列分隔符都沒有效果。

 

問題分析:hive中單獨將有問題的那幾列的數據類型設置為string類型,重新導入后發現,里面的值變成true或者false。

 

由此猜想,sqoop在導入的時候,將那幾列的數據轉換成了bool類型,問題產生的原因和hive建表語句無關,只能發生在sqoop端或者mysql端。

經過查看,發現mysql中有問題的那幾列數據類型都是tinyint(1),這說明什么,說明那幾列的數值長度為1。猜想sqoop將數值長度為1的數據類型,認為是bool類型,導入的時候會自動轉換成bool類型。

 

驗證:在sqoop的導入sql語句中,單獨對那幾個問題列進行數據類型轉換(CONVERT(match_type,SIGNED)),然后再導入hive,發現數據可以正常顯示,一點問題也沒有,

 

解決方法:sqoop導入的時候,將數據類型為1個字符長度的數值類型的列,進行格式轉換(CONVERT(match_type,SIGNED))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM