Member since
07-29-2020
533
Posts
278
Kudos Received
161
Solutions
My Accepted Solutions
Title | Views | Posted |
---|---|---|
135 | 10-14-2024 05:21 PM | |
241 | 09-07-2024 07:58 AM | |
362 | 09-07-2024 12:59 AM | |
468 | 09-03-2024 12:36 AM | |
445 | 09-03-2024 12:09 AM |
07-29-2022
10:42 AM
2 Kudos
Hi, Im not sure this can be fixed by changing some configuration on what you have wither on the processor or the service level. Since the root element is not considered in the conversion from xml to Json, as workaround you can surround your xml with arbitrary root element with the ReplaceText Processor before the ConvertRecrod Processor: Search Value: (?s)(^.*$) Replacement Value: <root>$1</root> Evaluation Mode: Entire Text This will output the following xml: <root>n<a>
<b>45</b>
</a>
n</root> And After ConvertRecord Prceossor : {"a": {"b":45}} Hope that helps. If it does, please Accept Solution. Thanks
... View more
07-28-2022
12:10 PM
1 Kudo
Hi , If you want to extract the value (3032) of the name "roll no" into flowfile attribute called "roll no" you can accomplish this with two processors as follows: 1- EvaluateJsonPath: roll no = $.[?(@.name=='roll no')].value Make sure the Return Type is set to Json since the exrepssion above will return json ["3032"]. 2- Update Attribute : which will extract the actual value from result json above with the following attribute: roll no = ${'roll no':jsonPath('$[0]')} Also you can refer to : https://community.cloudera.com/t5/Support-Questions/Unable-to-return-a-scalar-value-for-the-expression-from-NIFI/td-p/213677 If that helps, please Accept Solution. Thanks
... View more
07-28-2022
11:27 AM
1 Kudo
Hi the only way I can think of to avoid duplicating the content of the flowfile and not having to worry about the Maximum Buffer Size in the ExtractText processor is to use the ExecuteScript processor to update the flowfile content into json format. Here is an example of Script using "ECMAScript" in the ExecuteScript Processor "Script Body" property that can do that: var StreamCallback = Java.type("org.apache.nifi.processor.io.StreamCallback");
var IOUtils = Java.type("org.apache.commons.io.IOUtils");
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
var flowFile = session.get();
if(flowFile != null) {
// Create a new StreamCallback, passing in a function to define the interface method
flowFile = session.write(flowFile,
new StreamCallback(function(inputStream, outputStream) {
var text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
var obj = new Object();
obj.SomeKey = text;
var jsonString= JSON.stringify(obj);
outputStream.write(jsonString.getBytes(StandardCharsets.UTF_8))
}));
}
session.transfer(flowFile, REL_SUCCESS) Hope that helps. If it does please Accept Solution. Thanks
... View more
07-20-2022
01:48 PM
1 Kudo
Hi, Are you looking to copy the value from the parent tag name attribute "<OriginalQTY name=" 5.000">" to the value of the child tag "<OriginalORDEREDPURCHASEQUANTITY>" so that its matching all the time? If so you can try the TransformXML processor with the following script: <?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Document/PURCHPURCHASEORDERHEADERV2ENTITY/OriginalQTY/PURCHPURCHASEORDERLINEV2ENTITY/OriginalORDEREDPURCHASEQUANTITY">
<xsl:copy>
<xsl:value-of select="../../@name"/>
</xsl:copy>
</xsl:template>
</xsl:transform> If you find that helpful please accept solution. Thanks
... View more
07-15-2022
06:05 AM
In this case I would suggest ReplaceText processor with the Search Value set to: (MapRecord|\[|\]) And Replacement Value is set to Empty String.This will produce the result: aaaa|"{country=CHINA, city=null, street=null, latitude=null, postalCode=null, geocodeAccuracy=null, state=null, longitude=null}"
... View more
07-15-2022
05:39 AM
Not sure I understand the question, which processor/property are you taking about? Basically if you want to access a flowfile attribute value in expression language you can use ${A} in case you have an attribute called A
... View more
07-15-2022
05:22 AM
Hi, You can use FlattenJson processor to flatten your json before converting to CSV. The output Json after flattening will be something like this: { "id": "aaaa", "billingaddress.city": null, "billingaddress.country": "CHINA", "billingaddress.geocodeAccuracy": null, "billingaddress.latitude": null, "billingaddress.longitude": null, "billingaddress.postalCode": null, "billingaddress.state": null, "billingaddress.street": null } Another Option is to use JoltTransformJSON to flatten your json if you don't like the "billingaddress." prefix. You can use the following Jolt Spec: [ { "operation": "shift", "spec": { "id": "id", "billingaddress": { "*": "&" } } } ] Which will produce the following json: { "id" : "aaaa", "city" : null, "country" : "CHINA", "geocodeAccuracy" : null, "latitude" : null, "longitude" : null, "postalCode" : null, "state" : null, "street" : null } If you think this solves the issue please accept solution. Thanks
... View more
07-13-2022
09:18 AM
Hi, If I understood you correctly you want to log some information when the QueryRecord is executed, in this case you can use the Original relationship coming out of the QueryRecord where you can log the information like filename,timestamp...etc.
... View more
07-12-2022
06:29 AM
1 Kudo
Hi, I'm not sure how are you splitting the CSV using UpdateAttribute. You probably need to use something like QueryRecord processor where you can query the records in SQL like language, there you create two routing properties: one for ValuesWithNull and another for ValuesWithoutNull, then you redirect each to Save to the DB. Also why are you using the ConvertRecord Processor ? Are you converting the csv to another format like Json?
... View more
07-12-2022
06:19 AM
Marfill, If backpressure is applied when the total number of flowfiles in a given queue has reached (#nodes * the limit per node) for example if you have a cluster of 3 nodes and the threshold is set to 10,000 then the backpressure will be applied when total # of flow files = 30,000 and so on. Regarding the Control Rate I believe its done per node statistics, for example if you have a control rate that allows 1 flow file per hour and the control rate processor is set part of load balancing on 3 nodes cluster, let say you receive total of 3 files for the first time one on each node then the 3 will be get processed immediately.
... View more