简体   繁体   中英

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

In ADFv2 I'm looking up a date and passing it to an Azure Function. I can pass just the data like so:

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

However if I embed this into a JSON string like this:

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

I get this {"lastProcessDate":"@activity('GetLastDateProcessed').output.firstRow.LastDateProcessed"} instead of {"lastProcessDate":"2019-11-13"} as input into function.

Last I've tried to use a parameter with no success also.

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

The problem here is the parameter was not set. I set the parameter like this:

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

在此处输入图片说明 However this is a default value and is never dynamically updated. If I can update this string then the @concat method will work, but haven't been able to figure out how to dynamically update a parameter for the pipeline.

Another option could be a pipeline variable, but I don't know how to reference the variable.

How do I concat strings together with dynamic content?

I was able to get this to work by creating a second pipeline. This is not optimal, but works for people running into this same issue. Hopefully someone finds a better solution than this!

From the first pipeline I set the second pipelines parameter with this:

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

I named the parameter in the second pipeline lastProcessDate so then this worked:

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

This is not straight forward and can't be how Microsoft is expecting us to solve this!

I think what you are missing is that when you use the at-sign '@' in the json string you should follow it with a curly bracket '{'

In your example it will look something like this:

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

here is the source (found it in the comments): 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 .

I was able to achieve this with command.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM