如何在 Azure 数据工厂中参数化管道并发性(并行运行数)

问题描述 投票:0回答:1

我有两条管道: 父管道读取配置文件(查找活动),使用过滤器活动对其进行过滤,并将结果数组(例如 50 个项目)传递给 ForEach 活动以运行子管道,以预定义数量的并行运行(例如 3 个)执行每个项目的工作一次)。

子管道正在使用 SQL 服务器执行其任务, 对于此解决方案,不同的服务器允许并行运行的会话数量不同,例如

  • SQLsrv1 的 1 个会话
  • SQLsrv2 的 3 个会话
  • SQLsrv3 的 5 个会话

所以我需要以某种方式参数化子管道的并行运行数量,但是:

  • 可以使用子管道的并发参数来完成如果我只有 1 个 SQL 服务器, 但是如果管道的并发参数不接受动态内容怎么办?
  • ForEach 活动也不允许参数化其批次计数

我应该选择:

  • 创建第三个管道,用于将 ForEach 活动卸载到其中,
  • 然后克隆第三条管道以获取例如ForEach 活动中具有不同数量并行运行的 5 个管道 (1...5)
  • 将开关活动添加到父管道以具有例如5 个分支用于 1...5 个并行并添加 ExecutePipeline 活动以触发这些“第三个”管道克隆之一?

有更好/更简单的解决方案吗?

谢谢!

azure-data-factory
1个回答
0
投票

要针对不同大小的批次执行 for-each 活动,您可以定义

configuration or lookup table
,如下所示。

批量 表名
1 表1
1 表2
2 表3
2 表4
2 表5

这里table1和table2需要并行执行。同样,table3、table4、table5需要并行执行。这两个批次的运行大小不同。为此,您可以遵循以下方法。两个管道 - 一个用于对批次进行分组,另一个用于批量执行它们。

  • 管道 1 被视为外管道。其中 Lookup 活动用于仅选择批次字段数据。批次值将作为参数依次传递给子管道。

在查找活动中查询:

select distinct batch from config_table

enter image description here

  • 对于每个活动,都在查找活动之后添加。选中顺序,并在项目文本框中给出查找活动的输出

    @activity('Lookup1').output.value

  • 使用参数

    pipeline2
    创建另一个管道
    param_batch
    ,它被视为
    pipeline 1

    的内部管道
  • 在管道 1 中,在 for-each 活动内添加了执行管道活动。

    pipeline2
    添加到调用的管道中。参数
    param_batch
    的值给出为
    @{item().batch}

    enter image description here

  • 在 pipeline2 中,添加了 Lookup 活动,其中数据集引用相同的配置表。在查找活动中给出的查询:`select * from config_table where batch= @{pipeline().parameters.param_batch}

  • 在查找活动旁边,添加 for-each 活动,并在项目文本框中给出查找活动输出值。此处检查顺序。这将有助于同时运行该批次中的所有表。

© www.soinside.com 2019 - 2024. All rights reserved.