我的计划流程如下:
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连接?
非常感谢任何想法。
非常感谢!!!
答案 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中获取三个流。
希望这会有所帮助......