title: how to generate hash of flowfile attribute (some of them)
body: <p>I have a <code>flowfile</code> with 3 attributes a, b, c. I want to create 2 new attributes <code>a_b_hash</code>, <code>c_hash</code>.</p>
  
  <pre><code>a_b_hash = hash of (value of a + '_' + value of b)
  c_hash = hash of c
  </code></pre>
  
  <p>So at the end I want 5 attributes <code>a</code>, <code>b</code>, <code>c</code>, <code>a_b_hash</code>, <code>c_hash</code>. with a, b, c unchanged.</p>
  
  <p>I tried different combinations, but not able to generate hash. Some permutations work, but then I don't know if it is generating correct has.</p>
  
  <hr>
  
  <p>Update</p>
  
  <p>I created following template and ran it. I was expecting <code>a_hash</code> and <code>c_hash</code> to have same value, <code>a</code> and <code>c</code> have same value.</p>
  
  <p><code>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;template encoding-version="1.2"&gt;&lt;description&gt;&lt;/description&gt;&lt;groupId&gt;ae48862f-0165-1000-cc45-c1efcbb7ff08&lt;/groupId&gt;&lt;name&gt;dnu-hash-attribute&lt;/name&gt;&lt;snippet&gt;&lt;connections&gt;&lt;id&gt;91ef00b9-6cd0-3fed-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;backPressureDataSizeThreshold&gt;1 GB&lt;/backPressureDataSizeThreshold&gt;&lt;backPressureObjectThreshold&gt;10000&lt;/backPressureObjectThreshold&gt;&lt;destination&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;5cf06895-44e9-3f64-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/destination&gt;&lt;flowFileExpiration&gt;0 sec&lt;/flowFileExpiration&gt;&lt;labelIndex&gt;1&lt;/labelIndex&gt;&lt;name&gt;&lt;/name&gt;&lt;selectedRelationships&gt;success&lt;/selectedRelationships&gt;&lt;source&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;9b4dd5b8-8718-3f54-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/source&gt;&lt;zIndex&gt;0&lt;/zIndex&gt;&lt;/connections&gt;&lt;connections&gt;&lt;id&gt;2fbfd09e-72e8-3c46-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;backPressureDataSizeThreshold&gt;1 GB&lt;/backPressureDataSizeThreshold&gt;&lt;backPressureObjectThreshold&gt;10000&lt;/backPressureObjectThreshold&gt;&lt;destination&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;ab89e6d1-f08e-32be-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/destination&gt;&lt;flowFileExpiration&gt;0 sec&lt;/flowFileExpiration&gt;&lt;labelIndex&gt;1&lt;/labelIndex&gt;&lt;name&gt;&lt;/name&gt;&lt;selectedRelationships&gt;success&lt;/selectedRelationships&gt;&lt;source&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;5cf06895-44e9-3f64-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/source&gt;&lt;zIndex&gt;0&lt;/zIndex&gt;&lt;/connections&gt;&lt;connections&gt;&lt;id&gt;4e1f1096-d302-35f8-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;backPressureDataSizeThreshold&gt;1 GB&lt;/backPressureDataSizeThreshold&gt;&lt;backPressureObjectThreshold&gt;10000&lt;/backPressureObjectThreshold&gt;&lt;destination&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;9b4dd5b8-8718-3f54-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/destination&gt;&lt;flowFileExpiration&gt;0 sec&lt;/flowFileExpiration&gt;&lt;labelIndex&gt;1&lt;/labelIndex&gt;&lt;name&gt;&lt;/name&gt;&lt;selectedRelationships&gt;success&lt;/selectedRelationships&gt;&lt;source&gt;&lt;groupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/groupId&gt;&lt;id&gt;509810d8-4798-30e5-0000-000000000000&lt;/id&gt;&lt;type&gt;PROCESSOR&lt;/type&gt;&lt;/source&gt;&lt;zIndex&gt;0&lt;/zIndex&gt;&lt;/connections&gt;&lt;processors&gt;&lt;id&gt;9b4dd5b8-8718-3f54-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;position&gt;&lt;x&gt;89.14968895009349&lt;/x&gt;&lt;y&gt;271.1685572155761&lt;/y&gt;&lt;/position&gt;&lt;bundle&gt;&lt;artifact&gt;nifi-standard-nar&lt;/artifact&gt;&lt;group&gt;org.apache.nifi&lt;/group&gt;&lt;version&gt;1.6.0&lt;/version&gt;&lt;/bundle&gt;&lt;config&gt;&lt;bulletinLevel&gt;WARN&lt;/bulletinLevel&gt;&lt;comments&gt;&lt;/comments&gt;&lt;concurrentlySchedulableTaskCount&gt;1&lt;/concurrentlySchedulableTaskCount&gt;&lt;descriptors&gt;&lt;entry&gt;&lt;key&gt;Hash Value Attribute Key&lt;/key&gt;&lt;value&gt;&lt;name&gt;Hash Value Attribute Key&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;a&lt;/key&gt;&lt;value&gt;&lt;name&gt;a&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;/descriptors&gt;&lt;executionNode&gt;ALL&lt;/executionNode&gt;&lt;lossTolerant&gt;false&lt;/lossTolerant&gt;&lt;penaltyDuration&gt;30 sec&lt;/penaltyDuration&gt;&lt;properties&gt;&lt;entry&gt;&lt;key&gt;Hash Value Attribute Key&lt;/key&gt;&lt;value&gt;a_hash&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;a&lt;/key&gt;&lt;value&gt;(?s)(^.*$)&lt;/value&gt;&lt;/entry&gt;&lt;/properties&gt;&lt;runDurationMillis&gt;0&lt;/runDurationMillis&gt;&lt;schedulingPeriod&gt;0 sec&lt;/schedulingPeriod&gt;&lt;schedulingStrategy&gt;TIMER_DRIVEN&lt;/schedulingStrategy&gt;&lt;yieldDuration&gt;1 sec&lt;/yieldDuration&gt;&lt;/config&gt;&lt;name&gt;HashAttribute&lt;/name&gt;&lt;relationships&gt;&lt;autoTerminate&gt;true&lt;/autoTerminate&gt;&lt;name&gt;failure&lt;/name&gt;&lt;/relationships&gt;&lt;relationships&gt;&lt;autoTerminate&gt;false&lt;/autoTerminate&gt;&lt;name&gt;success&lt;/name&gt;&lt;/relationships&gt;&lt;state&gt;STOPPED&lt;/state&gt;&lt;style/&gt;&lt;type&gt;org.apache.nifi.processors.standard.HashAttribute&lt;/type&gt;&lt;/processors&gt;&lt;processors&gt;&lt;id&gt;ab89e6d1-f08e-32be-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;position&gt;&lt;x&gt;634.6037608433834&lt;/x&gt;&lt;y&gt;574.9859619140625&lt;/y&gt;&lt;/position&gt;&lt;bundle&gt;&lt;artifact&gt;nifi-standard-nar&lt;/artifact&gt;&lt;group&gt;org.apache.nifi&lt;/group&gt;&lt;version&gt;1.6.0&lt;/version&gt;&lt;/bundle&gt;&lt;config&gt;&lt;bulletinLevel&gt;WARN&lt;/bulletinLevel&gt;&lt;comments&gt;&lt;/comments&gt;&lt;concurrentlySchedulableTaskCount&gt;1&lt;/concurrentlySchedulableTaskCount&gt;&lt;descriptors&gt;&lt;entry&gt;&lt;key&gt;Log Level&lt;/key&gt;&lt;value&gt;&lt;name&gt;Log Level&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Log Payload&lt;/key&gt;&lt;value&gt;&lt;name&gt;Log Payload&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Attributes to Log&lt;/key&gt;&lt;value&gt;&lt;name&gt;Attributes to Log&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;attributes-to-log-regex&lt;/key&gt;&lt;value&gt;&lt;name&gt;attributes-to-log-regex&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Attributes to Ignore&lt;/key&gt;&lt;value&gt;&lt;name&gt;Attributes to Ignore&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;attributes-to-ignore-regex&lt;/key&gt;&lt;value&gt;&lt;name&gt;attributes-to-ignore-regex&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Log prefix&lt;/key&gt;&lt;value&gt;&lt;name&gt;Log prefix&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;character-set&lt;/key&gt;&lt;value&gt;&lt;name&gt;character-set&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;/descriptors&gt;&lt;executionNode&gt;ALL&lt;/executionNode&gt;&lt;lossTolerant&gt;false&lt;/lossTolerant&gt;&lt;penaltyDuration&gt;30 sec&lt;/penaltyDuration&gt;&lt;properties&gt;&lt;entry&gt;&lt;key&gt;Log Level&lt;/key&gt;&lt;value&gt;info&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Log Payload&lt;/key&gt;&lt;value&gt;false&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Attributes to Log&lt;/key&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;attributes-to-log-regex&lt;/key&gt;&lt;value&gt;.*&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Attributes to Ignore&lt;/key&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;attributes-to-ignore-regex&lt;/key&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Log prefix&lt;/key&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;character-set&lt;/key&gt;&lt;value&gt;UTF-8&lt;/value&gt;&lt;/entry&gt;&lt;/properties&gt;&lt;runDurationMillis&gt;0&lt;/runDurationMillis&gt;&lt;schedulingPeriod&gt;0 sec&lt;/schedulingPeriod&gt;&lt;schedulingStrategy&gt;TIMER_DRIVEN&lt;/schedulingStrategy&gt;&lt;yieldDuration&gt;1 sec&lt;/yieldDuration&gt;&lt;/config&gt;&lt;name&gt;LogAttribute&lt;/name&gt;&lt;relationships&gt;&lt;autoTerminate&gt;true&lt;/autoTerminate&gt;&lt;name&gt;success&lt;/name&gt;&lt;/relationships&gt;&lt;state&gt;DISABLED&lt;/state&gt;&lt;style/&gt;&lt;type&gt;org.apache.nifi.processors.standard.LogAttribute&lt;/type&gt;&lt;/processors&gt;&lt;processors&gt;&lt;id&gt;509810d8-4798-30e5-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;position&gt;&lt;x&gt;492.20976365100057&lt;/x&gt;&lt;y&gt;0.0&lt;/y&gt;&lt;/position&gt;&lt;bundle&gt;&lt;artifact&gt;nifi-standard-nar&lt;/artifact&gt;&lt;group&gt;org.apache.nifi&lt;/group&gt;&lt;version&gt;1.6.0&lt;/version&gt;&lt;/bundle&gt;&lt;config&gt;&lt;bulletinLevel&gt;WARN&lt;/bulletinLevel&gt;&lt;comments&gt;&lt;/comments&gt;&lt;concurrentlySchedulableTaskCount&gt;1&lt;/concurrentlySchedulableTaskCount&gt;&lt;descriptors&gt;&lt;entry&gt;&lt;key&gt;File Size&lt;/key&gt;&lt;value&gt;&lt;name&gt;File Size&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Batch Size&lt;/key&gt;&lt;value&gt;&lt;name&gt;Batch Size&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Data Format&lt;/key&gt;&lt;value&gt;&lt;name&gt;Data Format&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Unique FlowFiles&lt;/key&gt;&lt;value&gt;&lt;name&gt;Unique FlowFiles&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;generate-ff-custom-text&lt;/key&gt;&lt;value&gt;&lt;name&gt;generate-ff-custom-text&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;character-set&lt;/key&gt;&lt;value&gt;&lt;name&gt;character-set&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;a&lt;/key&gt;&lt;value&gt;&lt;name&gt;a&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;b&lt;/key&gt;&lt;value&gt;&lt;name&gt;b&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;c&lt;/key&gt;&lt;value&gt;&lt;name&gt;c&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;d&lt;/key&gt;&lt;value&gt;&lt;name&gt;d&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;e&lt;/key&gt;&lt;value&gt;&lt;name&gt;e&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;/descriptors&gt;&lt;executionNode&gt;ALL&lt;/executionNode&gt;&lt;lossTolerant&gt;false&lt;/lossTolerant&gt;&lt;penaltyDuration&gt;30 sec&lt;/penaltyDuration&gt;&lt;properties&gt;&lt;entry&gt;&lt;key&gt;File Size&lt;/key&gt;&lt;value&gt;20000B&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Batch Size&lt;/key&gt;&lt;value&gt;1&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Data Format&lt;/key&gt;&lt;value&gt;Text&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;Unique FlowFiles&lt;/key&gt;&lt;value&gt;false&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;generate-ff-custom-text&lt;/key&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;character-set&lt;/key&gt;&lt;value&gt;UTF-8&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;a&lt;/key&gt;&lt;value&gt;aaa&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;b&lt;/key&gt;&lt;value&gt;t&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;c&lt;/key&gt;&lt;value&gt;aaa&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;d&lt;/key&gt;&lt;value&gt;ow&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;e&lt;/key&gt;&lt;value&gt;two&lt;/value&gt;&lt;/entry&gt;&lt;/properties&gt;&lt;runDurationMillis&gt;0&lt;/runDurationMillis&gt;&lt;schedulingPeriod&gt;1 day&lt;/schedulingPeriod&gt;&lt;schedulingStrategy&gt;TIMER_DRIVEN&lt;/schedulingStrategy&gt;&lt;yieldDuration&gt;1 sec&lt;/yieldDuration&gt;&lt;/config&gt;&lt;name&gt;GenerateFlowFile&lt;/name&gt;&lt;relationships&gt;&lt;autoTerminate&gt;false&lt;/autoTerminate&gt;&lt;name&gt;success&lt;/name&gt;&lt;/relationships&gt;&lt;state&gt;STOPPED&lt;/state&gt;&lt;style/&gt;&lt;type&gt;org.apache.nifi.processors.standard.GenerateFlowFile&lt;/type&gt;&lt;/processors&gt;&lt;processors&gt;&lt;id&gt;5cf06895-44e9-3f64-0000-000000000000&lt;/id&gt;&lt;parentGroupId&gt;5842a0b1-f01b-3160-0000-000000000000&lt;/parentGroupId&gt;&lt;position&gt;&lt;x&gt;0.0&lt;/x&gt;&lt;y&gt;525.5136022177769&lt;/y&gt;&lt;/position&gt;&lt;bundle&gt;&lt;artifact&gt;nifi-standard-nar&lt;/artifact&gt;&lt;group&gt;org.apache.nifi&lt;/group&gt;&lt;version&gt;1.6.0&lt;/version&gt;&lt;/bundle&gt;&lt;config&gt;&lt;bulletinLevel&gt;WARN&lt;/bulletinLevel&gt;&lt;comments&gt;&lt;/comments&gt;&lt;concurrentlySchedulableTaskCount&gt;1&lt;/concurrentlySchedulableTaskCount&gt;&lt;descriptors&gt;&lt;entry&gt;&lt;key&gt;Hash Value Attribute Key&lt;/key&gt;&lt;value&gt;&lt;name&gt;Hash Value Attribute Key&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;c&lt;/key&gt;&lt;value&gt;&lt;name&gt;c&lt;/name&gt;&lt;/value&gt;&lt;/entry&gt;&lt;/descriptors&gt;&lt;executionNode&gt;ALL&lt;/executionNode&gt;&lt;lossTolerant&gt;false&lt;/lossTolerant&gt;&lt;penaltyDuration&gt;30 sec&lt;/penaltyDuration&gt;&lt;properties&gt;&lt;entry&gt;&lt;key&gt;Hash Value Attribute Key&lt;/key&gt;&lt;value&gt;c_hash&lt;/value&gt;&lt;/entry&gt;&lt;entry&gt;&lt;key&gt;c&lt;/key&gt;&lt;value&gt;(?s)(^.*$)&lt;/value&gt;&lt;/entry&gt;&lt;/properties&gt;&lt;runDurationMillis&gt;0&lt;/runDurationMillis&gt;&lt;schedulingPeriod&gt;0 sec&lt;/schedulingPeriod&gt;&lt;schedulingStrategy&gt;TIMER_DRIVEN&lt;/schedulingStrategy&gt;&lt;yieldDuration&gt;1 sec&lt;/yieldDuration&gt;&lt;/config&gt;&lt;name&gt;HashAttribute&lt;/name&gt;&lt;relationships&gt;&lt;autoTerminate&gt;true&lt;/autoTerminate&gt;&lt;name&gt;failure&lt;/name&gt;&lt;/relationships&gt;&lt;relationships&gt;&lt;autoTerminate&gt;false&lt;/autoTerminate&gt;&lt;name&gt;success&lt;/name&gt;&lt;/relationships&gt;&lt;state&gt;STOPPED&lt;/state&gt;&lt;style/&gt;&lt;type&gt;org.apache.nifi.processors.standard.HashAttribute&lt;/type&gt;&lt;/processors&gt;&lt;/snippet&gt;&lt;timestamp&gt;09/27/2018 12:16:54 EDT&lt;/timestamp&gt;&lt;/template&gt;
  </code></p>
  
  <p><a href="https://i.stack.imgur.com/nPCxV.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/nPCxV.jpg" alt="enter image description here"></a></p>