Sqoop之導入到Hive時特殊字元導致數據變亂
- 2019 年 10 月 4 日
- 筆記
問題是這樣的:
Sqoop從關係型資料庫導入數據到Hive時,發現數據量增多了,查找之後發現是由於源數據中含義rtn特殊字元的數據,這樣Hive遇到之後就將其視為換行,所以導入到Hive後數據條數增多了很多,問題找到了,怎麼解決呢.
方法1: sqoop的sql中對含有特殊字元的欄位進行replace操作,如下List-1所示,將特殊字元轉換為空格。
List-1 從mysql導入時用replace
replace(replace(replace(description,'r',' '),'n',' '),'t',' ')
方法2: 使用hive-drop-import-delims,這是sqoop官方提供的一個參數,導入到hive時,遇到特殊字元就會將改字元丟棄,如下List-2
List-2
sqoop import --connect jdbc:mysql://xxxxxxx --username xxx --password xxx --delete-target-dir --target-dir /tmp/hive/xxxx_temp -m 1 --query "SQL查詢語句 where $CONDITIONS" --hive-drop-import-delims --split-by xxx --fields-terminated-by "t" --lines-terminated-by "n"
Sqoop還提供了另一個參數--hive-delims-replacement,它會將特殊字元替換為我們設定的字元。

圖1
如上圖1是官網的截圖。由於歷史原因,目前我們倆種方式都使用,但是都慢慢的改為方法2了。