我有两条管道: 父管道读取配置文件(查找活动),使用过滤器活动对其进行过滤,并将结果数组(例如 50 个项目)传递给 ForEach 活动以运行子管道,以预定义数量的并行运行(例如 3 个)执行每个项目的工作一次)。
子管道正在使用 SQL 服务器执行其任务, 对于此解决方案,不同的服务器允许并行运行的会话数量不同,例如
所以我需要以某种方式参数化子管道的并行运行数量,但是:
我应该选择:
有更好/更简单的解决方案吗?
谢谢!
要针对不同大小的批次执行 for-each 活动,您可以定义
configuration or lookup table
,如下所示。
批量 | 表名 |
---|---|
1 | 表1 |
1 | 表2 |
2 | 表3 |
2 | 表4 |
2 | 表5 |
这里table1和table2需要并行执行。同样,table3、table4、table5需要并行执行。这两个批次的运行大小不同。为此,您可以遵循以下方法。两个管道 - 一个用于对批次进行分组,另一个用于批量执行它们。
在查找活动中查询:
select distinct batch from config_table
对于每个活动,都在查找活动之后添加。选中顺序,并在项目文本框中给出查找活动的输出
@activity('Lookup1').output.value
。
使用参数
pipeline2
创建另一个管道param_batch
,它被视为pipeline 1
的内部管道
在管道 1 中,在 for-each 活动内添加了执行管道活动。
pipeline2
添加到调用的管道中。参数 param_batch
的值给出为 @{item().batch}
在 pipeline2 中,添加了 Lookup 活动,其中数据集引用相同的配置表。在查找活动中给出的查询:`select * from config_table where batch= @{pipeline().parameters.param_batch}
在查找活动旁边,添加 for-each 活动,并在项目文本框中给出查找活动输出值。此处未检查顺序。这将有助于同时运行该批次中的所有表。