2016-11-22 48 views
2

我試圖創建了Talend工作,這將做到以下幾點:如何做一個簡單了Talend的Upsert與時間戳列

  1. 以輸入行和插入或更新到Oracle表中
  2. 如果行已經存在於Oracle表中,根據主鍵匹配檢查是否需要更新。
  3. 如果該行在Oracle表中不存在,則插入一個新行。

這3個很簡單,並且已經通過對tOracleOutput組件中的數據執行「插入或更新」操作實現。

tOracleOutput upsert

不過,我的問題是,我在Oracle表2額外列:

  • DM_UPDATE_DATE
  • DM_INSERT_DATE

如果出現更新,我需要請在DM_UPDATE_DATE列中設置當前日期時間,但只有在更新該行時纔可以。
如果發生插入,我需要將DM_INSERT_DATE和DM_UPDATE_DATE設置爲當前日期時間。
我還沒有能夠實現這種行爲 - 是否有一個開箱即用的Talend解決方案?

我已經看過了tMap組件,特別是這個SO Answer似乎有來自tMap組件的輸出來區分更新和插入,但是這對於ETL作業中非常標準的東西似乎過於複雜。

回答

3

保羅,

這裏是解決方案:

由於國防部日期設置上都更新和插入,這些設置在TMAP。請參閱代碼,但請記住這會返回一個字符串,因此請在tmap中使用字符串作爲數據類型,並使用varchar作爲oracleoutput組件中的數據類型。

TalendDate.getDate("CCYY-MM-DD hh:mm:ss") 

對於插入日期,在表上使用Oracle默認值,並且不要通過Talend發送值。

+0

我完全掛在Talend上,並沒有考慮在Oracle中這麼做,所以非常感謝。我通過在Oracle中使用了兩個東西來刪除對tMap的需求 - (1)。在DM_INSERT_DATE上插入的默認值和(2)設置DM_UPDATE_DATE的更新觸發器。 – Paul