Sqoop數據增量導入

從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 行業分隔符

目前可以使用兩種方式:

  1. 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"
  2. 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"
  • 問題記錄

    1. linux下執行Java調用略有不同,需要注意空格轉義等問題,調用時可以指定運行環境,避免執行不生效。

       
      xxxxxxxxxx
      Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmdA});
    2. 網上說sqoop默認行業分隔符爲逗號,但是我使用sqoop導入到hive時,查看卻是沒有分隔符的。

      所以,腳本和建hive腳本同時使用--enclosed-by "\t"比較靠譜。

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