【问题标题】:talend - output of tReplicate to subjobtalend - tReplicate 到子作业的输出
【发布时间】:2017-07-12 15:40:16
【问题描述】:

我的计划流程如下:

                                   subJob1   

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

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

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

它的作用是查询sql view1(对于subjob1,不同的subjobs有不同的视图)(这应该是很轻的查询,重的查询是来自父级的,所以思路是运行父级的重查询一次并重复使用),使用主键外键概念将其与父级的输出连接,并输出到文件中。

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

这听起来像是一个计划。但是,我无法解决如何将 tReplicate 输出从父作业传递到子作业?同样,如何在 subjob 上捕获 parent 的输出,以便可以加入 tMap?

非常感谢任何想法。

非常感谢!!!

【问题讨论】:

    标签: sql oracle talend


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      希望这会有所帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多