我的 ADF 中有一个 DataFlow,它接受一个 int 数组参数:
但是当我尝试从管道调用该数据流时,它似乎一点也不高兴:(
到目前为止,我已经尝试了 3 种不同的版本:
- 传递一个定义为硬编码表达式的空数组:imageLink
- 传递一个包含值的数组,定义为硬编码表达式:imageLink
- 从管道中传入一个数组变量:(在上面链接的图片中查看我是如何传递
ValuationDateIds
的)
无论我尝试哪种方式,我都会从数据流中得到同样的错误,说缺少参数。
{
"StatusCode": "DFExecutorUserError",
"Message": "Job failed due to reason: at Filter 'IdentifyTradesToDelete'Parameter 'TradeIdentityIds'(Line 35/Col 22): Parameter value for TradeIdentityIds missing",
"Details": "at Filter 'IdentifyTradesToDelete'Parameter 'TradeIdentityIds'(Line 35/Col 22): Parameter value for TradeIdentityIds missing"
}
虽然数据流调用日志显示参数已通过:
我做错了什么?
编辑: 我尝试了另一件事:我在 DF 上设置了一个默认参数,使用硬编码值,然后重新创建 DF 调用。它使用这些默认值自动填充参数,并且运行良好。但是,当我将调用修改为一对不同的数字(只是更改了数字,所以它在语法上是相同的)时,我发现它忽略了输入并继续使用默认值。
最佳答案
在这一点上,我相当确信 ADF 中的此功能(当前)存在错误。
将管道解析数组传递到数据流中不起作用。数据流的行为就像没有从管道传入任何值一样,并且会出错,或者使用默认参数(如果已配置)。
您可以使用“表达式”模式传递数据。配置pipeline中的参数传入一个“string”,它是一个dataflow-expression-language expression来定义一个数组。
例如,传递:array(123, 234)
将起作用。
(但请注意开头没有 @
- 我们不希望管道尝试计算表达式!)
因此,如果您在管道中有一个数组变量,您可以通过构建以数据流表达式术语定义整个数组的字符串并将其传入,将其传递给数据流。
看起来有点像这样:
array(@{join(variables('myVariable'), ',')})
请注意中间的 @{}
,它会导致管道解析中心位,从而产生如下所示的字符串:
array(val1, val2, val3)
其中 val1
等是 myVariable
数组中的原始值。
关于parameter-passing - 如何将数组参数传递到 ADF 数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64929282/