2014-01-13 61 views
1

我有一個sqoop作業,記錄增量最後一個值,以便在一天中執行增量附加操作。我的問題是我的目錄每天都在改變,所以我們可以根據log_date創建分區。在兩個作業之間共享sqoop增量最後一個值

我需要記錄整個一天的最終價值。然後我需要將這個價值傳遞給第二天新創建的工作。是否可以調用一個方法來獲得最後的值?

我目前的sqoop作業看起來像是用shell腳本編寫的。

sqoop job --create test_last_index \ 
-- import --connect jdbc:xxxx \ 
--password xxx \ 
--table test_$(date -d yesterday +%Y_%m_%d) \ 
--target-dir /dir/where/located \ 
--incremental append \ 
--check-column id 
--last-value 1 

回答

0

您不需要調用您正在執行的sqooping的方法。您只需創建一個sqoop作業並保存即可。在您創建的sqoop作業中添加參數--check-column,--incremental和--last-value。每次連續運行都會獲得最終價值,並保留在工作中。然後,您可以使用--exec命令定期運行作業,並且sqoop合併以將修改/附加數據與歷史數據合併。

希望這會有所幫助。

0

我已經爲Incremental Import開發了sqoop腳本,如下所示。

sqoop import 
--driver com.sap.db.jdbc.Driver 
--fetch-size 3000 
--connect connectionURL 
--username test 
--password test 
--table DATA 
--where YEAR=2002 
--check-column TIMESTAMP 
--incremental append 
--last-value "2016-06-22 12:31:37.0" 
--target-dir "/incremental_data_2002/year_partition=2002" 
--fields-terminated-by "," 
--lines-terminated-by "\n" 
--split-by YEAR 
--m 4 

現在,上述腳本已成功執行。

在上面的腳本中,我對--last-value as "2016-06-22 12:31:37.0"進行了硬編碼。當新數據到達RDBMS中的源表時,我再次檢查表中的最後一個值,並使用該值手動修改sqoop腳本。而不是我在這裏想要的是我需要動態沒有硬編碼在sqoop腳本文件。

0

不幸的是,Sqoop沒有包含一個自動的最後一個值的檢索。

在sqoop documentation

應使用:

在增量進口的端部,這應被指定爲--last值以用於隨後的進口的值被打印到屏幕。在運行後續導入時,應該以這種方式指定--last-value,以確保只導入新的或更新的數據。這是通過創建增量導入作爲保存的作業自動處理的,這是執行循環增量導入的首選機制。有關詳細信息,請參閱本文檔後面保存的作業部分。

相關問題