從mysql增量導出到hive庫
增量導入參數:--check-column Source column to check for incremental
--incremental Define an incremental import of type
--last-value Last imported value in the incremental
--columns 指定源表字段
--enclosed-by 行業分隔符
目前可以使用兩種方式:
-
append模式
可以使用append 加 --where 來達到根據時間戳來增量更新。
sqoop import --connect jdbc:mysql://192.168.100.36:3306/test -username admin -password admin --table test_mysql_to_hive_mic --where "jap_date_time >20160101.100101 and jap_date_time <=20161127.100101" --hive-database mysql --hive-table test_mysql_to_hive --split-by des_mysql_id --hive-import --incremental append --check-column des_mysql_id --last-value 0 --enclosed-by "\t"
-
lastmodified模式
直接使用lastmodified來根據時間戳增量更新。
x
sqoop import --connect jdbc:mysql://192.168.100.36:3306/test -username admin -password admin --table test_mysql_to_hive_mic --hive-database mysql --hive-table test_mysql_to_hive --split-by des_mysql_id --hive-import --incremental lastmodified --merge-key des_mysql_id --check-column jap_date_time --last-value "1980-11-28.11:30:00" --enclosed-by "\t"
-
問題記錄
-
linux下執行Java調用略有不同,需要注意空格轉義等問題,調用時可以指定運行環境,避免執行不生效。
xxxxxxxxxx
Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmdA});
-
網上說sqoop默認行業分隔符爲逗號,但是我使用sqoop導入到hive時,查看卻是沒有分隔符的。
所以,腳本和建hive腳本同時使用--enclosed-by "\t"比較靠譜。
-