如何在 Azure 数据工厂的 ForEach 活动中创建迭代范围的变量
How to create iteration scoped variables inside ForEach activities in Azure Data Factory
我有一个 ForEach
activity ,在每次迭代中,我需要设置一些迭代特定变量。我可以通过使用为管道(管道范围)定义的变量来实现这一点,但这迫使我 运行 在 Sequential
模式下循环,以便并行的多个迭代 运行ning 不会更新同一个变量。我真正需要的是在每次迭代(迭代范围)中定义这些变量的能力,这样我就可以在并行模式下 运行 ForEach
activity。
我考虑过创建一个 SQL 数据集,我可以在其中查找假值 (SELECT 1 AS var1, 2 AS var2) 只是为了获得一个结构,我可以在其中设置和使用这些值,但这似乎真的很蹩脚。我还考虑过将数组变量类型与 AppendVariable 选项一起使用,但这会引入大量自定义解析。
如果我可以拥有一个不必绑定到数据源的 InMemory 数据集,我可以在 ForEach 迭代中将其用作结构,那就太好了。有没有人对如何在 ForEach
循环中设置迭代特定变量有任何其他想法?
目前执行此操作的最佳方法是从外部查找中提取值或获取元数据 activity(如果可以)。使用内部查找不会具有成本效益或性能效率。特别是如果您迭代超过 100 次或数千次。当然,前提是您可以提前确定每次迭代的值。如果你做不到。我会单调地采用您的查找方法。或者,如果您可以完全摆脱变量,只需使用使用动态属性的表达式设置值。
我同意,这很烦人。
如果 Jason 的回答的第一部分适用于您的情况,那么这绝对是正确的选择。 (在循环外定义变量)。
但是假设变量是每次迭代动态计算的,那么我知道的唯一解决方案是将 Foreach 循环的主体定义为它自己的管道。现在您可以在该内部管道内定义变量,这些变量“作用域”为内部管道的单独执行。
相当多的 ADF 流水线限制可以像这样规避。嵌套 Ifs/Foreaches、Activity 限制等
我有一个 ForEach
activity ,在每次迭代中,我需要设置一些迭代特定变量。我可以通过使用为管道(管道范围)定义的变量来实现这一点,但这迫使我 运行 在 Sequential
模式下循环,以便并行的多个迭代 运行ning 不会更新同一个变量。我真正需要的是在每次迭代(迭代范围)中定义这些变量的能力,这样我就可以在并行模式下 运行 ForEach
activity。
我考虑过创建一个 SQL 数据集,我可以在其中查找假值 (SELECT 1 AS var1, 2 AS var2) 只是为了获得一个结构,我可以在其中设置和使用这些值,但这似乎真的很蹩脚。我还考虑过将数组变量类型与 AppendVariable 选项一起使用,但这会引入大量自定义解析。
如果我可以拥有一个不必绑定到数据源的 InMemory 数据集,我可以在 ForEach 迭代中将其用作结构,那就太好了。有没有人对如何在 ForEach
循环中设置迭代特定变量有任何其他想法?
目前执行此操作的最佳方法是从外部查找中提取值或获取元数据 activity(如果可以)。使用内部查找不会具有成本效益或性能效率。特别是如果您迭代超过 100 次或数千次。当然,前提是您可以提前确定每次迭代的值。如果你做不到。我会单调地采用您的查找方法。或者,如果您可以完全摆脱变量,只需使用使用动态属性的表达式设置值。
我同意,这很烦人。
如果 Jason 的回答的第一部分适用于您的情况,那么这绝对是正确的选择。 (在循环外定义变量)。
但是假设变量是每次迭代动态计算的,那么我知道的唯一解决方案是将 Foreach 循环的主体定义为它自己的管道。现在您可以在该内部管道内定义变量,这些变量“作用域”为内部管道的单独执行。
相当多的 ADF 流水线限制可以像这样规避。嵌套 Ifs/Foreaches、Activity 限制等