我的 ADF 中有一个 DataFlow,它接受 int 数组参数:
但是当我尝试从管道调用该数据流时,它似乎一点也不高兴:(
到目前为止我已经尝试了 3 个不同的版本:
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"
}
数据流调用日志显示参数was已传递,但是:
我做错了什么?
编辑: 我尝试了另一件事:我使用硬编码值在 DF 上设置默认参数,然后重新创建 DF 调用。它使用这些默认值自动填充参数,并且运行良好。但是,当我将调用修改为一对不同的数字时(只是更改了数字,因此语法上是相同的),结果发现它忽略了输入,只是继续使用默认值。
此时我相当确信 ADF 中的此功能(当前)存在错误。
将管道解析的数组传递到数据流中不起作用。数据流的行为就像没有从管道传入任何值一样,并且会出错,或者使用参数默认值(如果已配置)。
您可以使用“表达式”模式传递数据。配置管道中的参数传入一个“字符串”,该字符串是数据流表达式语言表达式,用于定义数组。
例如,传递:
array(123, 234)
就可以了。
(但请注意,开头没有 @
- 我们不希望管道尝试计算表达式!)
因此,如果管道中有一个数组变量,您可以通过构建以数据流表达式术语定义整个数组的字符串并将其传递到数据流中,将其传递给数据流。
看起来有点像这样:
array(@{join(variables('myVariable'), ',')})
注意中间的
@{}
,它会导致管道解析中心位,从而产生如下所示的字符串:
array(val1, val2, val3)
其中 val1
等是 myVariable
数组中最初的值。
您的管道参数是什么样的?当前的解决方法是将管道参数设置为字符串标量并将其设置为:[val1,val2,val3]。
将数据流参数设置为数组:string[]。
然后在数据流公式中将字符串转换为整数。
我一开始使用@brondahl 解决方案,因为我也觉得自己遇到了 ADF bug。
受到https://datanrg.blogspot.com/2020/09/passing-array-of-arrays-as-parameter-in.html的启发,我使用了双引号字符而不是单引号,对我来说,这已经解决了问题:
ADF ForEach 活动接受类型数组的管道参数 [" ","val1","val2","val3"],而 [' ','val1','val2','val3'] 和 [ ,val1,val2,val3] 不是。