2015-06-11 38 views
2

我舉個例子:昨天我輸出了1TB的數據。今天,數據庫又獲得了1GB的數據。如果我今天再次嘗試導入數據,Sqoop會導入1TB + 1GB的數據,然後我將它合併。所以這是一個令人頭疼的問題。我只想導入新數據並將其附加到舊數據。通過這種方式,我將每天將RDBMS數據導入HDFS。如何使用Sqoop僅導入新數據?

回答

4

您可以使用sqoop增量導入:

Sqoop提供了incremental import模式可用於檢索比一些以前導入的行集更新的唯一行。

增量導入參數:

--check-column (col)指定列於確定要導入的行時被檢查。 --incremental (mode)指定Sqoop如何確定哪些行是新的。模式的合法值包括追加和上次修改。

--last-value (value)指定上一次導入的檢查列的最大值。

參考:https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports

對於增量導入:您需要在打擊對最近進口參考值的檢查列指定的值。例如,如果指定了–incremental附加參數以及–check-column id and –last-value 100,則會導入id> 100的所有行。如果從命令行運行增量導入,則應在後續增量導入中指定爲–last-value的值將被打印到屏幕以供參考。如果從保存的作業運行增量導入,則此值將保留在保存的作業中。後續運行sqoop job –exec某些增量作業將繼續僅導入比之前導入的行更新的行。

對於一氣呵成導入所有的表,你就需要使用sqoop-進口的所有桌命令,但該命令必須滿足以下標準工作

每個表必須有單列主鍵。 您必須打算導入每個表的所有列。 您不得打算使用非默認拆分列,也不能通過WHERE子句強加任何條件。

參考:https://hortonworks.com/community/forums/topic/sqoop-incremental-import/