在Talend中同时运行具有不同上下文参数的相同子作业

时间:2014-02-09 08:41:31

标签: multithreading parallel-processing talend

我遇到过一个用例,我从tMyslInput获取行,然后逐个迭代它以完成检索到的每个行的子作用。

tMysqlInput ----->迭代-------> (具有多个组件的作业,例如编写文件,记录文件,输入数据库以及此类不同的过程,这本身就是一个完整的过程。)

问题是,由于迭代链接之后的子工作本身会处理所有事情,我只想分叉与使用不同上下文参数从tMysqlInput获取的行数一样多的子工作。

所以我试着做以下

tMysqlInput ------> iterate(* n,其中n是获取的行数)----->(作业)

但是在这里发生了什么,线程正在读取彼此的上下文变量,因此最终在类似的文件中编写类似的上下文,相同的数据库条目等。

我希望将子作业并行化,具体取决于使用同步线程获取的行数。

tMysqlInput查询可以说,从某些表中选择file_id,input_path,output_path,其中status ='已复制';

让我说4个元组,然后我想同时迭代4个元组。只需执行子作业,让子作业自行执行。

感谢

1 个答案:

答案 0 :(得分:3)

试试这个 -

1)单击迭代链接 - 在组件属性选项卡中,您可以看到基本设置 - 启用并行执行复选框(选中此复选框后),您可以输入要并行运行的迭代次数值。这可能是tMysqlInput组件返回的行数(但是,在执行tMysqlInput后,总行数变量将具有值 - globalMap.get(“tMysqlInput_X_NB_LINE”))

2)您可以在子作业中传递上下文变量值 - 首先,您必须在子作业中定义上下文变量,然后在迭代链接tSubJob之后单击组件属性选项卡,您将看到上下文Param (表格/网格),单击+符号选择上下文变量并指定其值。