【问题标题】:How to pass an array parameter into an ADF dataflow如何将数组参数传递到 ADF 数据流
【发布时间】:2020-11-24 07:39:13
【问题描述】:

我的 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 调用。它使用这些默认值自动填充参数,并且运行良好。但是当我将调用修改为一对不同的数字时(只是更改了数字,因此在语法上相同),结果发现它忽略了输入并继续使用默认值。

【问题讨论】:

标签: parameter-passing azure-data-factory-2 azure-data-flow


【解决方案1】:

在这一点上,我相当确信 ADF 中的此功能(当前)存在错误。

将管道解析的数组传递到数据流中不起作用。数据流的行为就像没有从管道传入任何值一样,并且会出错,或者使用参数默认值(如果已配置)。

可以使用“表达式”模式传递数据。将管道中的参数配置为传入一个“字符串”,它是一个数据流表达式语言表达式来定义一个数组。

例如,传递:array(123, 234) 将起作用。 (但请注意,开头缺少 @ - 我们希望管道尝试评估表达式!)

因此,如果您在管道中有一个数组变量,您可以将其传递给数据流,方法是构建以数据流表达式术语定义整个数组的字符串,并将其传入。

看起来有点像这样:

array(@{join(variables('myVariable'), ',')})

注意中间的@{},它会导致中心位被管道解析,从而产生如下所示的字符串:

array(val1, val2, val3) 其中val1 等是最初在myVariable 数组中的值。

【讨论】:

  • array(@{join(variables('myVariable'), ',')}) 抛出异常“列操作数不允许在文字表达式中”因此增强了上述建议并尝试使用 ['@ {join(split(variables('myVariable'), ',') , ''',''')}'] 用于字符串数组参数并且有效。:)
  • 这很有趣......使用方括号绝对没有对我有用。但下面马克的回答也表明了这一点。也许这里有一个字符串与整数的差异?
【解决方案2】:

您的管道参数是什么样的?当前的解决方法是将您的管道参数设置为字符串标量并将其设置为:[val1,val2,val3]。

将数据流参数设为数组:string[].

然后将字符串转换为数据流公式中的整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2021-05-01
    • 2015-01-19
    相关资源
    最近更新 更多