我在 Azure 数据工厂的 ForEach 循环内声明了变量,并且它们是按顺序分配的。这些变量中存储的值用于增量加载,特别是存储水印值以跟踪数据更改。
当我顺序运行循环时,变量分配按预期工作。但是,当我切换到并行运行循环时,变量分配的行为不符合预期。由于并行执行,变量似乎收到了不正确的值。
有人在 Azure 数据工厂中的并行 ForEach 循环中使用变量时遇到过类似的问题吗?即使循环并行运行,如何确保为变量分配正确的值?
任何建议或见解将不胜感激!
即使循环并行运行,如何确保为变量分配正确的值?
在并行执行中,迭代不依赖于每次迭代,并且每次迭代都不会等到前一次迭代完成。
您可以通过以下演示来更好地理解。
首先,我声明了一个数组变量
arr
并给出了像 [1,2,3,4]
这样的值。我已将此数组赋予 for-each 活动并设置并行执行。
在循环内,我使用了附加变量活动将每个项目值附加到数组
test
,并且我在 for-each 活动之后显示了该数组。每次迭代都会从给定的数组中获取值并随机完成。
可以看到for循环后的结果数组的顺序与第一个数组不同。
在此,迭代顺序不是固定的,而是随机的。这与您得到上述结果的原因相同。
在增量加载的情况下,当前迭代取决于前一个迭代的值或固定的迭代顺序,for-each 活动的并行执行将不起作用。在这种情况下,您需要以顺序方式执行 for-each 活动。当迭代或这些迭代的结果彼此独立时,可以使用并行执行。
在同一个示例中,当以顺序方式执行循环时,它将给出预期的结果。