Skip to main content

MergeContent

Description

Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.

Tags

archive, concatenation, content, correlation, flowfile-stream, flowfile-stream-v3, merge, stream, tar, zip

Properties

In the list below required Properties are shown with an asterisk (*). Other properties are considered optional. The table also indicates any default values, and whether a property supports the NiFi Expression Language.

Display NameAPI NameDefault ValueAllowable ValuesDescription
Merge Strategy *Merge StrategyBin-Packing Algorithm
  • Bin-Packing Algorithm
  • Defragment
Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles
Merge Format *Merge FormatBinary Concatenation
  • TAR
  • ZIP
  • FlowFile Stream, v3
  • FlowFile Stream, v2
  • FlowFile Tar, v1
  • Binary Concatenation
  • Avro
Determines the format that will be used to merge the content.
Attribute Strategy *Attribute StrategyKeep Only Common Attributes
  • Keep Only Common Attributes
  • Keep All Unique Attributes
Determines which FlowFile attributes should be added to the bundle. If 'Keep All Unique Attributes' is selected, any attribute on any FlowFile that gets bundled will be kept unless its value conflicts with the value from another FlowFile. If 'Keep Only Common Attributes' is selected, only the attributes that exist on all FlowFiles in the bundle, with the same value, will be preserved.
Correlation Attribute NameCorrelation Attribute NameIf specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.

Supports Expression Language, using FlowFile attributes and Environment variables.

This property is only considered if:
  • the property Merge Strategy has a value of Bin-Packing Algorithm
Metadata Strategy *mergecontent-metadata-strategyDo Not Merge Uncommon Metadata
  • Use First Metadata
  • Keep Only Common Metadata
  • Do Not Merge Uncommon Metadata
  • Ignore Metadata
For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.

This property is only considered if:
  • the property Merge Format has a value of Avro
Minimum Number of Entries *Minimum Number of Entries1The minimum number of files to include in a bundle

This property is only considered if:
  • the property Merge Strategy has a value of Bin-Packing Algorithm
Maximum Number of Entries *Maximum Number of Entries1000The maximum number of files to include in a bundle

This property is only considered if:
  • the property Merge Strategy has a value of Bin-Packing Algorithm
Minimum Group Size *Minimum Group Size0 BThe minimum size for the bundle

This property is only considered if:
  • the property Merge Strategy has a value of Bin-Packing Algorithm
Maximum Group SizeMaximum Group SizeThe maximum size for the bundle. If not specified, there is no maximum.

This property is only considered if:
  • the property Merge Strategy has a value of Bin-Packing Algorithm
Max Bin AgeMax Bin AgeThe maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours
Maximum number of Bins *Maximum number of Bins5Specifies the maximum number of bins that can be held in memory at any one time
Delimiter Strategy *Delimiter StrategyDo Not Use Delimiters
  • Do Not Use Delimiters
  • Filename
  • Text
Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.

This property is only considered if:
  • the property Merge Format has a value of Binary Concatenation
HeaderHeader FileFilename or text specifying the header to use. If not specified, no header is supplied.

Supports Expression Language, using FlowFile attributes and Environment variables.

This property is only considered if:
  • the property Delimiter Strategy has a value of Filename or Text
  • the property Merge Format has a value of Binary Concatenation
FooterFooter FileFilename or text specifying the footer to use. If not specified, no footer is supplied.

Supports Expression Language, using FlowFile attributes and Environment variables.

This property is only considered if:
  • the property Delimiter Strategy has a value of Filename or Text
  • the property Merge Format has a value of Binary Concatenation
DemarcatorDemarcator FileFilename or text specifying the demarcator to use. If not specified, no demarcator is supplied.

Supports Expression Language, using FlowFile attributes and Environment variables.

This property is only considered if:
  • the property Delimiter Strategy has a value of Filename or Text
  • the property Merge Format has a value of Binary Concatenation
Compression Level *Compression Level1
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored

This property is only considered if:
  • the property Merge Format has a value of ZIP
Keep Path *Keep Pathfalse
  • true
  • false
If using the Zip or Tar Merge Format, specifies whether or not the FlowFiles' paths should be included in their entry names.

This property is only considered if:
  • the property Merge Format has a value of ZIP or TAR
Tar Modified TimeTar Modified Time${file.lastModifiedTime}If using the Tar Merge Format, specifies if the Tar entry should store the modified timestamp either by expression (e.g. ${file.lastModifiedTime} or static value, both of which must match the ISO8601 format 'yyyy-MM-dd'T'HH:mm:ssZ'.

Supports Expression Language, using FlowFile attributes and Environment variables.

This property is only considered if:
  • the property Merge Format has a value of TAR

Dynamic Properties

This component does not support dynamic properties.

Relationships

NameDescription
failureIf the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure
mergedThe FlowFile containing the merged content
originalThe FlowFiles that were used to create the bundle

Reads Attributes

NameDescription
fragment.countApplicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the "fragment.count" attribute in a given bundle, all must have the same value.
fragment.identifierApplicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.
fragment.indexApplicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the "fragment.identifier" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the "fragment.identifier" attribute and the same value for the "fragment.index" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.
segment.original.filenameApplicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.
tar.permissionsApplicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used

Writes Attributes

NameDescription
filenameWhen more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg
merge.bin.ageThe age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output
merge.countThe number of FlowFiles that were merged into this bundle
merge.reasonThis processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.
merge.uuidUUID of the merged flow file that will be added to the original flow files attributes.

State Management

This component does not store state.

Restricted

This component is not restricted.

Input Requirement

This component requires an incoming relationship.

Example Use Cases

Use Case 1

Concatenate FlowFiles with textual content together in order to create fewer, larger FlowFiles.

Configuration

"Merge Strategy" = "Bin Packing Algorithm"
"Merge Format" = "Binary Concatenation"
"Delimiter Strategy" = "Text"
"Demarcator" = "\n" (a newline can be inserted by pressing Shift + Enter)
"Minimum Number of Entries" = "1"
"Maximum Number of Entries" = "500000000"
"Minimum Group Size" = the minimum amount of data to write to an output FlowFile. A reasonable value might be "128 MB"
"Maximum Group Size" = the maximum amount of data to write to an output FlowFile. A reasonable value might be "256 MB"
"Max Bin Age" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be "5 mins"

Use Case 2

Concatenate FlowFiles with binary content together in order to create fewer, larger FlowFiles.

Not all binary data can be concatenated together. Whether or not this configuration is valid depends on the type of your data.

Configuration

"Merge Strategy" = "Bin Packing Algorithm"
"Merge Format" = "Binary Concatenation"
"Delimiter Strategy" = "Text"
"Minimum Number of Entries" = "1"
"Maximum Number of Entries" = "500000000"
"Minimum Group Size" = the minimum amount of data to write to an output FlowFile. A reasonable value might be "128 MB"
"Maximum Group Size" = the maximum amount of data to write to an output FlowFile. A reasonable value might be "256 MB"
"Max Bin Age" = the maximum amount of time to wait for incoming data before timing out and transferring the FlowFile along even though it is smaller than the Max Bin Age. A reasonable value might be "5 mins"

Use Case 3

Reassemble a FlowFile that was previously split apart into smaller FlowFiles by a processor such as SplitText, UnpackContext, SplitRecord, etc.

Configuration

"Merge Strategy" = "Defragment"
"Merge Format" = the value of Merge Format depends on the desired output format. If the file was previously zipped together and was split apart by UnpackContent,
a Merge Format of "ZIP" makes sense. If it was previously a .tar file, a Merge Format of "TAR" makes sense. If the data is textual, "Binary Concatenation" can be
used to combine the text into a single document.
"Delimiter Strategy" = "Text"
"Max Bin Age" = the maximum amount of time to wait for incoming data before timing out and transferring the fragments to 'failure'. A reasonable value might be "5 mins"

For textual data, "Demarcator" should be set to a newline (\n), set by pressing Shift+Enter in the UI. For binary data, "Demarcator" should be left blank.

System Resource Considerations

ScopeDescription
MEMORYWhile content is not stored in memory, the FlowFiles' attributes are. The configuration of MergeContent (maximum bin size, maximum group size, maximum bin age, max number of entries) will influence how much memory is used. If merging together many small FlowFiles, a two-stage approach may be necessary in order to avoid excessive use of memory.

See Also

MergeRecord, SegmentContent