Support Questions
Find answers, ask questions, and share your expertise
Announcements
Alert: Welcome to the Unified Cloudera Community. Former HCC members be sure to read and learn how to activate your account here.

Need to access and update a processor property

Highlighted

Need to access and update a processor property

New Contributor

I have an ExecuteScript processor that needs to add an attribute to an outgoing flowfile (JSON). However, i need that attribute's value to increment. I've tried to access the processor's property (myAttribute) via (var myAttr = session.getAttribute(flowfile, 'myAttribute')), but the non-zero value is never retrieved. I want to increment that value and then put it back into the processor (here, I tried session.putAttribute(flowfile, "myAttribute", myAttr + 1), as well as add it to the outgoing JSON.

4 REPLIES 4

Re: Need to access and update a processor property

It is not clear whether you are talking about processor properties or flow file attributes, these are two different things.

A flow file attribute is retrieved using session.getAttribute

A processor property value is retrieve by using context.getProperty(NAME)

While a processor is running, you cannot change it's properties, you can only obtain the values using the context.

Re: Need to access and update a processor property

New Contributor

Thanks, Bryan. I was talking about a processor property,. I wanted to add the value of that property to a JSON record as an attribute, incrementing that value in each flowfile record the ExecuteScript receives. I'll have to determine another way to 'persist' a value between executions of the processor.

Re: Need to access and update a processor property

If you want the value to persist for the liftetime of the processor across restarts of NiFi, then you will want to use the state manager, example:

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update...

If you only care about the value from the time the processor is start until it is stopped, then you can just have a simple member variable of the processor hold an integer counter or whatever type.

Re: Need to access and update a processor property

New Contributor

Appreciate the feedback. After your first answer I decided to go a slightly different way. I can insert a timestamp as another JSON element and use that. I can then use that column later in QueryDatabaseTable so that I retrieve only new rows in the target table. That seems to work fine.

Don't have an account?
Coming from Hortonworks? Activate your account here