如何在Azure Data Factory V2中将JSON传递给具有嵌入式动态内容的Azure函数

时间:2019-12-09 19:06:37

标签: azure azure-functions azure-data-factory-2

在ADFv2中,我正在查找日期并将其传递给Azure函数。我可以像这样传递数据:

@activity('GetLastDateProcessed').output.firstRow.LastDateProcessed

但是,如果我将其嵌入到这样的JSON字符串中:

{"lastProcessDate":"@activity('GetLastDateProcessed').output.firstRow.LastDateProcessed"}

我得到这个{“ lastProcessDate”:“ @ activity('GetLastDateProcessed')。output.firstRow.LastDateProcessed”}而不是{“ lastProcessDate”:“ 2019-11-13”}作为函数的输入。

最后,我也尝试使用没有成功的参数。

@concat('{"lastProcessDate":"', string(pipeline().parameters.lastProcessDate), '"}')

这里的问题是未设置参数。我这样设置参数:

@activity('GetLastDateProcessed').output.firstRow.LastDateProcessed

enter image description here 但是,这是默认值,永远不会动态更新。如果我可以更新此字符串,则@concat方法将起作用,但无法弄清楚如何为管道动态更新参数。

另一个选项可能是管道变量,但我不知道如何引用该变量。

如何将字符串与动态内容结合在一起?

3 个答案:

答案 0 :(得分:0)

我能够通过创建第二条管道来使其工作。这不是最佳选择,但适用于遇到相同问题的人们。希望有人能找到比这更好的解决方案!

在第一个管道中,我设置了第二个管道参数:

@activity('GetLastDateProcessed').output.firstRow.LastDateProcessed

我在第二个管道lastProcessDate中命名了参数,因此可以正常工作:

@concat('{"lastProcessDate":"', string(pipeline().parameters.lastProcessDate), '"}')

这不是直截了当的,也不是微软期望我们解决这个问题的方式!

答案 1 :(得分:0)

我认为您所缺少的是,当您在json字符串中使用符号'@'时,您应该在括号后加上大括号'{'

在您的示例中,它将类似于以下内容:

{"lastProcessDate":"@{activity('GetLastDateProcessed').output.firstRow.LastDateProcessed}"}

这是来源(在评论中找到它): https://azure.microsoft.com/en-us/blog/azure-functions-now-supported-as-a-step-in-azure-data-factory-pipelines/#:~:text=Azure%20Data%20Factory%20(ADF)%20is,in%20your%20data%20factory%20pipelines

答案 2 :(得分:0)

我能够通过命令来实现。

{
  "storedprocedure":"storedProcName",
  "params":"@{variables('currentDt')}"
}