Skip to main content

MergeContent

描述:

根据用户定义的策略将一组数据流合并在一起,并将它们打包到一个数据流中。建议只为单个传入连接配置处理器,因为不会从不同连接中的数据流创建数据流组。此组件根据需要更新mime.type属性。

标签:

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

参数:

如下列表中,必填参数则标识为加粗. 其他未加粗参数,则表示为可选参数。表中同时提到参数默认值设置, 并且 参数还支持 表达式语言.

名字默认值允许值列表描述
合并策略Bin-Packing
- Bin-Packing生成数据流的'bin'并尽可能填充每个bin。 数据流根据其大小和可选的属性放入bin中(如果设置了<属性关联>属性)
- Defragment将属性关联的片段组合回一个单一的数据流。如果使用此策略,则所有数据流必须具有<fragment.identifier>,<fragment.count>和<fragment.index>属性,或者(为了向后兼容)<segment.identifier>,<segment.count>和<segment.index>。具有相同“fragment.identifier”值的所有数据流将组合在一起。该组中的所有数据流必须具有“fragment.count”属性的相同值。此组中的所有数据流的“fragment.index”属性的值必须唯一值且在0以及“fragment.count”之间。
指定用于合并内容的算法。“Defragment”算法将属性关联的数据流组合成一个单一的数据流。'Bin-Packing'算法生成由随机选择的数据流填充的数据流
合并格式二进制连接
- TAR数据流的bin将合并为一个TAR文件。如果<保持路径>属性设置为保留,数据流的<path>属性将用于在TAR文件中创建目录;否则,所有数据流都将添加到TAR文件的根目录中。如果数据流具有名为<tar.permissions>的属性,该属性为3个字符,每个字符在0-7之间,则该属性将用作TAR条目的“权限设置”。
- ZIP数据流的bin将合并为一个ZIP文件。如果<保持路径>属性设置为保留,则数据流的<path>属性将用于在ZIP文件中创建目录;否则,所有数据流都将添加到ZIP文件的根目录中。 <压缩率>属性指示要使用的ZIP压缩率级别。
- 数据流,v3合并为一个Version 3 数据流
- 数据流,v2A bin of FlowFiles will be combined into a single Version 2 FlowFile Stream
- 数据流包,v1合并为单个Version 1 数据流包
- 二进制连接所有数据流的内容将连接在一起形成一个数据流
- Avro所有数据流的Avro内容将连接在一起形成一个数据流
确定将用于合并内容的格式。
属性策略仅保留公共属性
- 仅保留公共属性将删除bin中所有数据流上属性值不同的属性。将保留所有数据流中属性值相同的属性。
- 保留所有唯一属性将保留对bin中所有数据流具有相同值或者没有数据流值的任何属性。例如,如果bin包含3个数据流,其中2个为'greeting'属性值为'hello',而第3个数据流没有'greeting'属性,则出站数据流将获得'greeting'属性价值'hello'。
确定应将哪些数据流属性添加到包中。如果选择“保留所有唯一属性”,则将保留每个数据流上的每个属性,除非其值与另一个数据流的值冲突。如果选择“仅保留公共属性”,则合并文件中每个数据流中存在相同值的属性才会被保留。
关联属性名称如果指定,则相似的数据流将被合并在一起,其中'相似的数据流'表示指定的属性具有的相同值的数据流。如果未指定,数据流将按从队列中提取的顺序进行合并。

支持表达式语言 (支持流属性和变量)
元数据策略不合并非常见的元数据
- 使用第一元数据对于支持元数据的任何输入格式(例如Avro),将在输出数据流上设置将被合并的第一个数据流的元数据。
- 仅保留公共元数据对于支持元数据的任何输入格式(例如Avro),任何其元数据值与第一个数据流匹配的数据流,将删除任何不匹配的元数据,但将合并数据流。任何其元数据值与bin中第一个数据流的元数据值完全不匹配的数据流都不会被合并。
- 不合并非常见的元数据对于支持元数据的任何输入格式(例如Avro),任何其元数据值与bin中第一个数据流不匹配的数据流都不会被合并。
- 忽略元数据忽略来自数据流的任何元数据。
对于输入格式支持元数据(例如Avro)的数据流,此属性确定应将哪些元数据添加到合并结果中。如果选择“使用第一元数据”,则将使用要合并的第一个数据流中的元数据键/值。如果选择“仅保留公共元数据”,则仅保留合并结果中具有相同值的所有数据流上存在的元数据。如果选择“忽略元数据”,则不会将任何元数据传输到传出的合并数据流。如果选择“不合并非常见元数据”,则不会合并任何其元数据值与第一个要合并的数据流不匹配的数据流。
最小条目数1合并结果中包含的最小文件数
最大条目数1000合并结果中包含的最大文件数
最小合并结果大小0 B合并结果的最小大小
最大合并结果大小合并结果的最大大小。如果未指定,则没有最大值。
最大Bin年龄将触发Bin完成的最大时间。预期格式为<duration> <time unit>,其中<duration>为正整数,<time unit>为秒,分,小时之一
最大bin数5指定可以在内存中保留的最大bin数
分隔符策略文件名
- 文件名将从指定文件内容中获取页眉,页脚和分界符的值
- 文本页眉,页脚和分界符的值将被指定为属性值
确定页眉,页脚和分界符是否应来自于指定文件的内容,或者是使用属性中的值。
页眉指定要作为页眉的文件名。如果未指定,则不提供页眉。仅当使用二元并置合并策略时,此属性才有效;否则,它会被忽略。

支持表达式语言 (支持流属性和变量)
页脚指定要作为页脚的文件名。如果未指定,则不提供页脚。仅当使用二元并置合并策略时,此属性才有效;否则,它会被忽略。

支持表达式语言 (支持流属性和变量)
分界符指定要作为分界符的文件名。如果未指定,则不提供分界符。仅当使用二元并置合并策略时,此属性才有效;否则,它会被忽略。

支持表达式语言 (支持流属性和变量)
压缩级别1
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
指定使用Zip合并格式时要使用的压缩级别;如果不使用Zip合并格式,则忽略此值
保留路径不保留
- 保留
- 不保留
如果使用Zip或Tar格式,则指定数据流的路径是否应包含在其条目名称中;如果使用其他合并策略,则忽略此值
Tar修改时间${file.lastModifiedTime}如果使用Tar格式,指定Tar包中的条目是否应该通过表达式存储修改后的时间戳(例如${file.lastModifiedTime}或静态值,两者都必须匹配ISO8601格式'yyyy-MM-dd'T'HH:mm:ssZ';如果使用其他合并策略或留空,则忽略此值

支持表达式语言 (支持流属性和变量)

连线:

名字描述
failure如果无法创建合并结果,那么用于创建合并结果的所有数据流都将转移到failure状态
original用于创建合并结果的原数据流
merged包含合并内容的数据流

读取属性:

名字描述
fragment.identifier仅在<合并策略>属性设置为Defragment时适用。此属性具有相同值的所有数据流将合并在一起。
fragment.index仅在<合并策略>属性设置为Defragment时适用。此属性表明应该组装片段的顺序。使用Defragment合并策略时,此属性必须存在于所有数据流上,并且必须是唯一的介于0和fragment.count属性值之间的整数。如果两个或多个数据流“fragment.identifier”属性具有相同值并且“fragment.index”属性具有相同值,则只处理的第一个数据流,并且不会将后续数据流合并到Bin中。
fragment.count仅在<合并策略>属性设置为Defragment时适用。此属性必须存在于所有具有fragment.identifier属性相同值的数据流上。单个合并结果中的所有数据流此属性应具备相同的值。此属性的值表明给定合并结果中应该预期的数据流数。
segment.original.filename仅在<合并策略>属性设置为Defragment时适用。此属性必须存在于所有具有fragment.identifier属性相同值的数据流上。单个合并结果中的所有数据流此属性应具备相同的值。此属性的值将用于已完成的合并数据流的文件名。
tar.permissions仅在<合并结果>属性设置为Tar时适用。该属性的值必须为3个字符;每个字符必须在0到7(包括)范围内,用来设置应用于数据流的Tar条目的文件权限。如果此属性缺失或具有无效值,则将使用默认值644

写入属性:

名字描述
filename合并多个文件时,文件名来自segment.original.filename属性。如果原数据流中不存在该属性,则将文件名设置为与系统时间匹配的纳秒数。然后应用文件扩展名:如果合并格式为TAR,则文件名将附加.tar,如果合并格式为ZIP,则文件名将附加.zip,如果合并格式为数据流,则文件名将附加.pkg
merge.count合并到此合并结果中的数据流数
merge.bin.age合并和输出时bin的年龄(以毫秒为单位)。实际上是此合并结果中的任意数据流在输出之前在此组件中等待的最长时间
merge.uuid合并数据流的UUID属性将被添加到原始数据流

状态管理:

该组件不保存状态。

限制:

该组件没有限制

输入流要求:

组件必须提供输入流。

系统资源考量:

资源描述
MEMORY虽然合并内容未存储在内存中,但MergeContent组件的的配置(最大bin大小,最大合并结果大小,最大bin年龄,最大条目数)将影响使用的内存量。 如果将许多小数据流合并在一起,可能需要分两阶段合并以避免过度使用内存。

参考:

MergeRecord, SegmentContent