如何将 JSON 传递到 Azure 数据工厂 V2 中具有嵌入式动态内容的 Azure 函数

How to pass JSON into an Azure Function with embedded dynamic content in Azure Data Factory V2

在 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

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

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

如何将字符串与动态内容连接在一起?

我能够通过创建第二个管道来实现它。这不是最优的,但适用于 运行 遇到同样问题的人。希望有人能找到比这更好的解决方案!

从第一个管道开始,我用这个设置了第二个管道参数:

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

我将第二个管道中的参数命名为 lastProcessDate,这样就可以了:

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

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

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

在您的示例中,它看起来像这样:

{"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.

我是用命令实现的。

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