I would chain attribute processors in a forward faced manor. You have a set
of 4 known steps that may be labeled together in your ACTION Attribute
which is what type of processing needs to be completed yes?
I would chain some Route on Attributes together as a bottom pipe and use
Regex to look at the commands required to execute on the flow file. My idea
isnt very dynamic in nature its just a standard pipe with some regex to
decide if it will send it up to the processor or not, and from there its
passed to the next RouteOnAttribute type Gate.
I called my 'convert' a, and b, so A in my transform line is always before
B. So I checked if the very first flag was an A.. On the second I ignored
the first char and checked the Second as B. I could see this turning into a
more efficient binary check.
${ACTION:matches('^a.*')}
${ACTION:matches('^.,b')}
On Thu, Apr 6, 2017 at 2:25 PM, Pompilio Ramirez <[email protected]>
wrote:
> Thank you Andy.
>
> We have n number of data points that send data to us to normalize and our
> end points have different normalized requirements.
> So we are also juggling ease of dataflow configuration ( many people
> implementing dataflows ) so trying to keep things simple and have only one
> point in which a DFM needs to go to configure a dataflow.
>
> So dataFromSiteX comes in to our system.
>
> That data is X format .... we "normalize" it through identify Mime type in
> to a standard format we have. And then we route based on who our end
> customers are and their requirements ( zip'd / merged to X size /
> proprietary stuff ).
>
> We are trying to find the most efficient method that balances dataflow
> configuration simplicity ( CM / DFM ) versus technical efficiency.
> To meet the req we could certainly accomplish it using multiple update
> routes on different pieces of the dataflow, but then a DFM would have to
> know that they need to configure many UpdateAttributes.
>
> We are going to do something similar to your suggestion and probably
> extend the route on attribute code, we are also going to create an external
> "U/I or script or something" that will allow a DFM to configure a dataflow
> and that way we can "validate" the initial dataflow configuration, since we
> could have many attributes and settings that we want to pre-populate one
> time and in one place. It feels weird to have a separate UI that populates
> the "nifi UI" but validating a dataflow through the dataflow lifecycle
> builds extra complexity for CM / Tier 1 troubleshooting.
>
>
> On Thu, Apr 6, 2017 at 1:20 PM Andy LoPresto <[email protected]> wrote:
>
>> Hi,
>>
>> I’m not sure I fully understand the question, as you say that “customers”
>> have attributes, but I was under the impression that the customers were
>> various processors/“endpoints”. Flowfiles are the atomic units of data
>> passing through the flow, and that is where attributes are stored.
>>
>> Regardless, to perform complex string comparisons, I believe your best
>> option is an ExecuteScript processor. In any of the supported languages,
>> you can quickly parse the attributes into collections (i.e. java.util.List)
>> via String split on delimiter, perform set arithmetic (A - B), and then
>> route based on the results.
>>
>> Andy LoPresto
>> [email protected]
>> *[email protected] <[email protected]>*
>> PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4 BACE 3C6E F65B 2F7D EF69
>>
>> On Apr 6, 2017, at 7:58 AM, Pompilio Ramirez <[email protected]>
>> wrote:
>>
>> Hello,
>>
>> I cant find a way to take 2 attributes and create an attribute with only
>> the difference between them.
>>
>> Has anyone accomplished that? In general want to define routing to
>> processing groups that do things. I want to define end points ( say
>> customer1 / customer2 / customer3 )
>> I get one flowfile and I define what the customer(s) need to normalize
>> the data using advance update attribute.
>>
>> So flowfile condition is met and I build attributes under actions:
>>
>> So I enrich flowfile with attribute:
>>
>> So customer1 would have an attribute "ACTIONS" that says ( convert /
>> merge / enrich / convert )
>> Customer2 has "ACTIONS" ( convert / merge / gzip )
>> Customer3 has "ACTIONS" ( convert / merge )
>>
>> I then want to take that flowfile and have logic that says all customers
>> need convert / merge so I'll take that flowfile and do convert ( this is
>> very expensive ) ( or do all the common steps as one flowfile ) before they
>> clone.
>>
>> Knowing my steps are linear so just want to find a way to build logic to
>> know my common steps and create attributes with the difference.
>>
>> thoughts?
>>
>>
>>
--
Joseph
<?xml version="1.0" ?>
<template encoding-version="1.0">
<description></description>
<groupId>4d524aff-015b-1000-ffff-ffffd57a20c5</groupId>
<name>A/B Processing Flow Idea</name>
<snippet>
<connections>
<id>4d535dd8-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d527eed-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d525eb8-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d53823c-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>10703b6d-953b-1828-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>18f630d1-9b01-1129-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d54029a-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d53f7fd-015b-1000-0000-000000000000</id>
<type>FUNNEL</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>10703b6d-953b-1828-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d540df7-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d53f7fd-015b-1000-0000-000000000000</id>
<type>FUNNEL</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d527eed-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d541a29-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d539f0d-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d53f7fd-015b-1000-0000-000000000000</id>
<type>FUNNEL</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d545e04-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>f5873fc3-767f-17ac-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>unmatched</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d539f0d-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d5718d1-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d54923c-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>A</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d539f0d-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d582aca-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>276b39dc-5e8c-1208-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>B Processing</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>f5873fc3-767f-17ac-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d583e73-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>f5873fc3-767f-17ac-0000-000000000000</id>
<type>PROCESSOR</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d54923c-015b-1000-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d586d90-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d584ff8-015b-1000-0000-000000000000</id>
<type>FUNNEL</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>success</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>276b39dc-5e8c-1208-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<connections>
<id>4d588041-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
<backPressureObjectThreshold>10000</backPressureObjectThreshold>
<destination>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>4d584ff8-015b-1000-0000-000000000000</id>
<type>FUNNEL</type>
</destination>
<flowFileExpiration>0 sec</flowFileExpiration>
<labelIndex>1</labelIndex>
<name></name>
<selectedRelationships>unmatched</selectedRelationships>
<source>
<groupId>4d524aff-015b-1000-0000-000000000000</groupId>
<id>f5873fc3-767f-17ac-0000-000000000000</id>
<type>PROCESSOR</type>
</source>
<zIndex>0</zIndex>
</connections>
<funnels>
<id>4d53f7fd-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>951.0</x>
<y>315.7515721838514</y>
</position>
</funnels>
<funnels>
<id>4d584ff8-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>2176.1465625558176</x>
<y>298.42767148910724</y>
</position>
</funnels>
<labels>
<id>4d585a2b-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>2136.3269847520705</x>
<y>248.39805568074712</y>
</position>
<height>150.0</height>
<style></style>
<width>150.0</width>
</labels>
<processors>
<id>f5873fc3-767f-17ac-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>1636.5355224609377</x>
<y>270.65702872682016</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Routing Strategy</key>
<value>
<name>Routing Strategy</name>
</value>
</entry>
<entry>
<key>B Processing</key>
<value>
<name>B Processing</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Routing Strategy</key>
<value>Route to Property name</value>
</entry>
<entry>
<key>B Processing</key>
<value>${ACTION:matches('^.,b')}</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>RouteOnAttribute (Group2 - B)</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>B Processing</name>
</relationships>
<relationships>
<autoTerminate>false</autoTerminate>
<name>unmatched</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.standard.RouteOnAttribute</type>
</processors>
<processors>
<id>10703b6d-953b-1828-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>428.0</x>
<y>359.75155692506235</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Delete Attributes Expression</key>
<value>
<name>Delete Attributes Expression</name>
</value>
</entry>
<entry>
<key>ACTION</key>
<value>
<name>ACTION</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Delete Attributes Expression</key>
</entry>
<entry>
<key>ACTION</key>
<value>b</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>UpdateAttribute - Only B</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
</processors>
<processors>
<id>18f630d1-9b01-1129-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>3.0</x>
<y>362.7515721838514</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>File Size</key>
<value>
<name>File Size</name>
</value>
</entry>
<entry>
<key>Batch Size</key>
<value>
<name>Batch Size</name>
</value>
</entry>
<entry>
<key>Data Format</key>
<value>
<name>Data Format</name>
</value>
</entry>
<entry>
<key>Unique FlowFiles</key>
<value>
<name>Unique FlowFiles</name>
</value>
</entry>
<entry>
<key>generate-ff-custom-text</key>
<value>
<name>generate-ff-custom-text</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>File Size</key>
<value>0B</value>
</entry>
<entry>
<key>Batch Size</key>
<value>1</value>
</entry>
<entry>
<key>Data Format</key>
<value>Text</value>
</entry>
<entry>
<key>Unique FlowFiles</key>
<value>false</value>
</entry>
<entry>
<key>generate-ff-custom-text</key>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>GenerateFlowFile</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.standard.GenerateFlowFile</type>
</processors>
<processors>
<id>276b39dc-5e8c-1208-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>1573.1231031847722</x>
<y>0.0</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Delete Attributes Expression</key>
<value>
<name>Delete Attributes Expression</name>
</value>
</entry>
<entry>
<key>Processed2</key>
<value>
<name>Processed2</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Delete Attributes Expression</key>
</entry>
<entry>
<key>Processed2</key>
<value>By B</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>B - Processor </name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
</processors>
<processors>
<id>4d525eb8-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>0.0</x>
<y>200.7515721838514</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>File Size</key>
<value>
<name>File Size</name>
</value>
</entry>
<entry>
<key>Batch Size</key>
<value>
<name>Batch Size</name>
</value>
</entry>
<entry>
<key>Data Format</key>
<value>
<name>Data Format</name>
</value>
</entry>
<entry>
<key>Unique FlowFiles</key>
<value>
<name>Unique FlowFiles</name>
</value>
</entry>
<entry>
<key>generate-ff-custom-text</key>
<value>
<name>generate-ff-custom-text</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>File Size</key>
<value>0B</value>
</entry>
<entry>
<key>Batch Size</key>
<value>1</value>
</entry>
<entry>
<key>Data Format</key>
<value>Text</value>
</entry>
<entry>
<key>Unique FlowFiles</key>
<value>false</value>
</entry>
<entry>
<key>generate-ff-custom-text</key>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>GenerateFlowFile</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.standard.GenerateFlowFile</type>
</processors>
<processors>
<id>4d527eed-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>426.0</x>
<y>206.75155692506235</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Delete Attributes Expression</key>
<value>
<name>Delete Attributes Expression</name>
</value>
</entry>
<entry>
<key>ACTION</key>
<value>
<name>ACTION</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Delete Attributes Expression</key>
</entry>
<entry>
<key>ACTION</key>
<value>a,b</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>UpdateAttribute - A & B </name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
</processors>
<processors>
<id>4d539f0d-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>1153.0</x>
<y>262.7515721838514</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Routing Strategy</key>
<value>
<name>Routing Strategy</name>
</value>
</entry>
<entry>
<key>A</key>
<value>
<name>A</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Routing Strategy</key>
<value>Route to Property name</value>
</entry>
<entry>
<key>A</key>
<value>${ACTION:matches('^a.*')}</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>RouteOnAttribute (Group1 - A)</name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>A</name>
</relationships>
<relationships>
<autoTerminate>false</autoTerminate>
<name>unmatched</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.standard.RouteOnAttribute</type>
</processors>
<processors>
<id>4d54923c-015b-1000-0000-000000000000</id>
<parentGroupId>4d524aff-015b-1000-0000-000000000000</parentGroupId>
<position>
<x>1137.8545484972722</x>
<y>8.18349838256836</y>
</position>
<config>
<bulletinLevel>WARN</bulletinLevel>
<comments></comments>
<concurrentlySchedulableTaskCount>1</concurrentlySchedulableTaskCount>
<descriptors>
<entry>
<key>Delete Attributes Expression</key>
<value>
<name>Delete Attributes Expression</name>
</value>
</entry>
<entry>
<key>Procesed</key>
<value>
<name>Procesed</name>
</value>
</entry>
</descriptors>
<executionNode>ALL</executionNode>
<lossTolerant>false</lossTolerant>
<penaltyDuration>30 sec</penaltyDuration>
<properties>
<entry>
<key>Delete Attributes Expression</key>
</entry>
<entry>
<key>Procesed</key>
<value>By A</value>
</entry>
</properties>
<runDurationMillis>0</runDurationMillis>
<schedulingPeriod>0 sec</schedulingPeriod>
<schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
<yieldDuration>1 sec</yieldDuration>
</config>
<name>A - Processor </name>
<relationships>
<autoTerminate>false</autoTerminate>
<name>success</name>
</relationships>
<style></style>
<type>org.apache.nifi.processors.attributes.UpdateAttribute</type>
</processors>
</snippet>
<timestamp>04/08/2017 07:37:10 EDT</timestamp>
</template>