Azure data factory 如何在Azure数据工厂中的ForEach活动内创建迭代作用域变量

Azure data factory 如何在Azure数据工厂中的ForEach活动内创建迭代作用域变量,azure-data-factory,azure-data-factory-2,Azure Data Factory,Azure Data Factory 2,我有一个ForEach活动,在每个迭代中,我需要设置一些特定于迭代的变量。我可以通过使用为管道作用域定义的变量来实现这一点,但这迫使我以顺序模式运行循环,以便并行运行的多个迭代不会更新同一个变量。我真正需要的是在每个迭代范围内定义这些变量的能力,以便我能够以并行模式运行ForEach活动 我曾经考虑过创建一个SQL数据集,在那里我可以查找假值,选择1作为var1,选择2作为var2,只是为了得到一个可以设置和使用这些值的结构,但这看起来真的很蹩脚。我还考虑过使用带有AppendVariable选

我有一个ForEach活动,在每个迭代中,我需要设置一些特定于迭代的变量。我可以通过使用为管道作用域定义的变量来实现这一点,但这迫使我以顺序模式运行循环,以便并行运行的多个迭代不会更新同一个变量。我真正需要的是在每个迭代范围内定义这些变量的能力,以便我能够以并行模式运行ForEach活动

我曾经考虑过创建一个SQL数据集,在那里我可以查找假值,选择1作为var1,选择2作为var2,只是为了得到一个可以设置和使用这些值的结构,但这看起来真的很蹩脚。我还考虑过使用带有AppendVariable选项的数组变量类型,但这会引入很多自定义解析


如果我可以有一个内存数据集,它不必绑定到数据源,我可以在ForEach迭代中使用它作为结构,那就太好了。关于如何在ForEach循环中设置迭代特定变量,有人有其他想法吗?

关于目前最好的方法是从外部查找中提取值或获取元数据活动(如果可以的话)。使用内部查找将不会有成本效益或性能效益。尤其是当你迭代100或数千次时。当然,这是如果您可以提前确定每个迭代的值。如果你不能。我会支持你的查找方法。或者,如果您可以完全摆脱变量,只需使用使用动态属性的表达式设置值。

我同意,这是非常烦人和恼人的

如果Jason回答的第一部分对你的情况是有价值的,那么这绝对是正确的选择。定义循环外部的变量

但是假设每次迭代都动态计算变量,那么我知道的唯一解决方案是将Foreach循环体定义为它自己的管道。现在,您可以在该内部管道内定义变量,该变量的作用域为内部管道的单独执行


相当多的ADF的管道限制可以这样绕过。嵌套的Ifs/Foreaches、活动限制等。

我不知道提前的值,这就是为什么我在循环中有那个开关。我可能会写一些巨大的表达式,这相当于每个变量的switch语句,但我觉得这会很难看,很难维护。使用开关处理变量设置的各种方式似乎更易于阅读,因此存储过程只需引用变量即可理解。如果我在数据集上创建假查找,我是否有能力向其写入值?就像我会做一个假选择一样,选择NULL作为var1,NULL作为var2,然后将真实值写入dataset/var1和dataset/var2字段:output.firstRow.var1='myData'不确定我是否完全理解查找可以返回您想要的任何值。。包括基于表达式创建它们,但返回值变得不可更改。。。在没有看到开关的其他分支和开关表达式的情况下,它似乎可以工作。我想我知道你在说什么,所以我认为它不会工作。下面是我在其中一个switch语句中使用的一个表达式,其中我只使用文件名的前四个字符来获取代码@substringactivity'GetFileMetadata'。output.itemName,0,4。在另一种情况下,它可能在文件名的中间,而在另一种情况下,它可能根本不存在,这取决于文件的来源…因此切换。因此,如果可以对文件进行查找,那么每个SetExpression都可以替换为对文件的查找,如果我理解正确的话。这似乎比需要的更复杂,所以可能我只是不理解某些东西。在一天结束时,我所需要的只是一个地方,根据循环中的条件存储计算出的值,然后在以后的活动中使用它们。哇,这是真的吗。所以实际上,您不能在并行运行的ForEach循环中使用变量?这有什么记载吗?我相信这仍然是真的。变量现在是在管道级别声明的,想想类级别的变量。@MartinWickman它在MSDN中的某个地方被记录了下来-我记得几天前遇到过这个问题。但这并不明显——它将一些段落隐藏在某个页面的某个地方。我也会这样做:定义一个内部管道,并将特定于迭代的值传递给该执行。