2017-04-08 63 views
1

我試圖在talend中複製abinitio作業。Talend:將來自兩個有條件的subjobs的數據合併爲單個文件

我在作業中有兩個起點(有條件的),我正在使用tjava IF觸發器使任何一個子作業執行。

現在,因爲,無論是子作業將執行的一個,我願意把只是一個tFileInputDelimited和收斂兩個子作業數據流之一。

我嘗試過使用tUnite,但通過這樣做,兩個工作正在結合。單個subjob不能有兩個觸發起點。我在這種情況下得到錯誤。

一種方法是使用中間文件,然後再次讀取它。但是這不會是abinitio工作的複製。很難說服。

輸入數據可能非常大,所以我不確定tmap的連接是否是一個好方法。

有人可以提出一些更好的方法,請建議。

enter image description here

enter image description here

回答

2

如果你只需要寫入同一個文件,而不是與你能

  1. 調用子之前設置一個OutputStream相同的組件處理行工作。就業前工作可以很方便。
  2. 將每個子作業上的tFileOutputDelimeted寫入該OutputStream而不是文件。
  3. 處理完輸入數據後,關閉OutputStream。後工作可以很方便。

如果您需要使用相同的邏輯處理行,您可以從您已經擁有的每個不同的子作業調用一個公共的子作業。

use a common sub-job to merge data flows

+0

輸出流將受內存驅動。你認爲我們會在大文件的情況下使用相同的,或者說數據庫卸載?基本上我試圖理解流量合併的想法。如果假設我在同一個作業中有teradatainput和MySQLinput,並且基於某個上下文變量,它們中的任何一個都會執行,比如說模式是相同的。我可以只有一個輸出文件和合並流? – NishantM

+0

Outputstream可以是FileOutputStream,它的句柄將存儲在內存中,數據將被寫入光盤。沒有必要使用保存內存中所有數據的ByteArrayOutputStream。 – Kriegel

0

您可以使用THASH組件,而不是一箇中間文件,只要你能處理內存中的所有。

相關問題