Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 06-05-2017 10:26 AM
I have streaming JSON data and based on value of a key in JSOn , I need to decide what location I put that JSON content in.
Could I get some directions for this please. I have 4 different values for a key and so the JSON needs to be placed in 4 diff. locations
Created 06-05-2017 01:40 PM
You would create a dynamic attribute to select the key of interest. Consider the following sample doc:
{
"key-1": "value 1",
"key-2": "value 2",
"key-3": "value 3"
}
In this case, if we needed to route based on the value of key-2, we could create a property in the processor that is
$.key-2
and assign this to some name, such as "routing.value".
With that bit of information extracted as an attribute, we can feed the flowfiles from the EvaluateJsonPath processor. If the locations you mention are file locations, we could potentially simply use a PutFile with expression language to specify a path making use of the routing.value by defining Directory to use the attribute with something like "/path/to/my/data/${routing.value}"
A more powerful and flexible case would be where each flowfile gets sent to a RouteOnAttribute processor after EvaluateJsonPath. In this case, we could define routes for each of the cases and allow them to be sent on to other NiFi components. For instance, maybe some things go to disk and others go to JMS. We can create relationships for RouteOnAttribute that will then allow us to connect each type to its respective processing path.
Created 06-05-2017 01:40 PM
You would create a dynamic attribute to select the key of interest. Consider the following sample doc:
{
"key-1": "value 1",
"key-2": "value 2",
"key-3": "value 3"
}
In this case, if we needed to route based on the value of key-2, we could create a property in the processor that is
$.key-2
and assign this to some name, such as "routing.value".
With that bit of information extracted as an attribute, we can feed the flowfiles from the EvaluateJsonPath processor. If the locations you mention are file locations, we could potentially simply use a PutFile with expression language to specify a path making use of the routing.value by defining Directory to use the attribute with something like "/path/to/my/data/${routing.value}"
A more powerful and flexible case would be where each flowfile gets sent to a RouteOnAttribute processor after EvaluateJsonPath. In this case, we could define routes for each of the cases and allow them to be sent on to other NiFi components. For instance, maybe some things go to disk and others go to JMS. We can create relationships for RouteOnAttribute that will then allow us to connect each type to its respective processing path.
Created 06-07-2017 05:34 AM
Awesome! Thank you.