2017-04-08 29 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组件,而不是一个中间文件,只要你能处理内存中的所有。

相关问题