mysql中的資料,表中列出了資料匯入過程中的「髒」資料\t,\n,\r,null,下面列出了解決思路
id=2 這裡的des 裡面有1個換行符實際為
1234
567id=3 desc有乙個\t 實際為1234 567
id=4 desc is null
如果直接通過一般的sqoop匯入語句
匯入後的結果是
staff.id staff.name staff.desc staff.birth
1 chenchi1 1234567 2019-09-01 16:46:08
2 chenchi2 1234 null
567 2019-09-05 10:35:05.0 null null
3 chenchi3 1234 null
4 chenchi4 null 2019-09-02 16:59:21
沒有看錯就是亂碼了,hive裡面我用的fields-terminated-by "\t" ,row formatted by '\n',具體就不詳解上述原因了
問題有三,1、id=2換行符出現問題,2,id=3tab鍵出現問題,3、null值顯示為 字串「null」
1、會導致資料量增多
2、會導致欄位不匹配
3、有點坑爹,根本看不出來,本人親自遇見過,在mysql資料庫中倒入到hive後,總資料一模一樣,但是查where a is null and date =yyyy-mm 這種時資料一直對不上
解決辦法
hive中查出的資料,備註:使用query是不指定 --table staff \
staff.id staff.name staff.desc staff.birth
1 chenchi1 1234567 2019-09-01 16:46:08
2 chenchi2 1234||567 2019-09-05 10:35:05
3 chenchi3 1234567 2019-09-05 10:33:31
4 chenchi4 null 2019-09-02 16:59:21
原理--hive-delims-replacement "|" \ 將換行符替換
--hive-drop-import-delims 將換行符\n, \r, and \01等捨棄
--replace 將mysql表中的\t替換掉,也可以替換\n\r char (9):tab | char(10): 換行符 |char(13): 回車符
--null-string '\\n' \ 將字串中null保留,如果沒有mysql中的null在hive裡會變成null
--null-non-string '\\n'
其實這些都是官網上有說明的,沉下心多看看sqoop官網。
sqoop2從hdfs中匯入到mysql
資料準備 hive資料庫檔案 例路徑為 user hadoop hive test 在mysql建立與hive中資料庫結構一樣的資料庫。啟動sqoop2服務 sqoop2 server start 登入客戶端 sqoop2 shell 建立資料庫物件 建立hdfs的link物件 建立乙個job作業 ...
MySQL錶用Sqoop方式匯入到Hive表中
1 首先在hive中新建資料庫mydb,2 然後開啟putty軟體,登入到安裝hive的伺服器,輸入使用者名稱和密碼後,進入到 root hdp 利用sqoop語句按照指定mysql資料庫的表新建hive表,語句如下 sqoop create hive table connect jdbc mysq...
使用sqoop將mysql資料匯入到hive中
首先準備工具環境 hadoop2.7 mysql5.7 sqoop1.4 hive3.1 準備一張資料庫表 接下來就可以操作了。一 將mysql資料匯入到hdfs 首先我測試將zhaopin表中的前100條資料匯出來,只要id jobname salarylevel三個字段。再hdfs上建立目錄 h...