talend - tReplicate到subjob

时间:2017-07-12 15:40:16

标签: sql oracle talend

我的计划流程如下:

                                   subJob1   

                                    /
tOracleInput -> tMap -> tReplicate  --   subJob2 
                                    \
                                   subJob3

这个想法是只为这个大sql视图查询数据库一次,复制输出,并传递给子工具,以便可以并行处理它。还要概述subjob将要做什么:

componentToCatchOutputFromParent   ->  tMap -> tFileOutput
                                  /
tOracleInput (query from view)  

这样做是为了查询sql view1(对于subjob1,不同的子视图的不同视图)(这应该是非常轻的查询,繁重的查询是来自父级的,所以想法是运行父的重度查询一次并重用),使用primary-key-foreign-key概念将其与父级的输出连接起来,然后输出到文件中。

这样做的目的是通过最小化数据库调用来加速数据处理,并能够并行处理输出文件的生成。

这听起来像一个计划。但是,我无法绕过如何将父作业的tReplicate输出传递给subjob?同样,如何从子工作中捕获父输出,以便可以与tMap连接?

非常感谢任何想法。

非常感谢!!!

2 个答案:

答案 0 :(得分:1)

如果您不想写入文件,可以使用tHashOutput组件将结果集写入内存。然后使用tHashInput(将其链接到tHashOutput)以在稍后的作业中读取不同子工作中的结果集。

你甚至不需要复制。只需将tmap输出放到tHashOutput,然后使用3个不同的子工作,每个子工作都有自己的tHashInput链接到tHashOutput组件。

答案 1 :(得分:0)

首先你不需要在tMap之后使用tReplicate,因为只需从tMap中获得2或3个流,就可以在tMap itselt中完成数据的复制。

现在你无法直接将数据流传递给subjob。所以你在这里可以做的是 - 将数据放到一些文件中。 - 使用tParalellize并创建3个从文件中读取并与视图查询连接的子工作。将tParalellize componect连接到所有三个subjob,你就完成了。

您可以采取的第二种方法是:

在第一个作业中,在tmap中,将所有三个tOracleInput与视图查询连接为查找,并根据您的连接条件从tMap中获取三个流。

希望这会有所帮助......