2017-07-17 60 views
1

我已經在自己的本地機器(Linux)中擁有一個MySQL表,並且我有一個與MySQL表具有相同架構的Hive外部表。如何使用Sqoop自動將MySQL表與Hive外部表同步?

我想從MySQL表導入數據到我的Hive外部表,我使用Sqoop。

但問題是,無論何時將新記錄添加到MySQL表中,它都不會自動更新Hive外部表?

這是Sqoop導入命令我使用的是:

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -P --split-by id --columns id,name,age,salary --table customer --target-dir /user/chamith/mysqlhivetest/ --fields-terminated-by "," --hive-import --hive-table test.customers 

我缺少的東西在這裏?或者如何做到這一點?

任何幫助,不勝感激。

+1

使用增量加載的方式.. – TKHN

+0

添加像什麼新的記錄添加..是它的突變數據或附加數據的樣本? – TKHN

+0

@TKHN它絕對是一個新的行,所有列都有值。增量負載方法?如果你能對此有所瞭解?謝謝! – Kulasangar

回答

3

在你的情況一個新的行附加到表。 所以你需要使用增量追加方法。

何時使用追加模式?

  • 作品對於被遞增隨着時間的數值數據,如 自動遞增鍵
  • 進口,其中新行會不斷添加 隨着行ID表當值

現在你需要添加命令

-check-column指定在確定要導入哪些行時要檢查的列。

- 增量指定Sqoop如何確定哪些行是新的。

--last價值從以前的進口

理想指定檢查列的最大值在這種情況下sqoop metastore自動記憶上次值

這是使用sqoop工作執行步驟1:用正常的導入命令內在載入數據。

第2步:

sqoop job --create incrementalImportJob -- import \ 
--connect jdbc:mysql://localhost:3306/sqoop 
--username root 
-P 
--split-by id 
--columns id,name,age,salary 
--table customer 
--incremental append \ 
--check-column id \ 
--last-value 5 
--fields-terminated-by "," 
--target-dir hdfs://ip:8020/path/to/table/; 

希望這有助於..