UpdateRecord

Description:

Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.

Additional Details...

Tags:

update, record, generic, schema, json, csv, avro, log, logs, freeform, text

Properties:

In the list below, the names of required properties appear in bold. Any other properties (not in bold) are considered optional. The table also indicates any default values.

Display NameAPI NameDefault ValueAllowable ValuesDescription
Record ReaderRecord ReaderController Service API:
RecordReaderFactory
Implementations: CSVReader
JsonPathReader
AvroReader
CEFReader
Syslog5424Reader
JsonTreeReader
WindowsEventLogReader
XMLReader
SyslogReader
JASN1Reader
ReaderLookup
ParquetReader
GrokReader
ScriptedReader
YamlTreeReader
ExcelReader
Specifies the Controller Service to use for reading incoming data
Record WriterRecord WriterController Service API:
RecordSetWriterFactory
Implementations: XMLRecordSetWriter
FreeFormTextRecordSetWriter
AvroRecordSetWriter
ScriptedRecordSetWriter
JsonRecordSetWriter
ParquetRecordSetWriter
RecordSetWriterLookup
CSVRecordSetWriter
Specifies the Controller Service to use for writing out the records
Replacement Value StrategyReplacement Value StrategyLiteral Value
  • Literal Value The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.
  • Record Path Value The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.
Specifies how to interpret the configured replacement values

Dynamic Properties:

Supports Sensitive Dynamic Properties: No

Dynamic Properties allow the user to specify both the name and value of a property.

NameValueDescription
A RecordPath.The value to use to replace fields in the record that match the RecordPathAllows users to specify values to use to replace fields in the record that match the RecordPath.
Supports Expression Language: true (will be evaluated using flow file attributes and Environment variables)

Relationships:

NameDescription
failureIf a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship
successFlowFiles that are successfully transformed will be routed to this relationship

Reads Attributes:

None specified.

Writes Attributes:

NameDescription
record.indexThis attribute provides the current row index and is only available inside the literal value expression.
record.error.messageThis attribute provides on failure the error message encountered by the Reader or Writer.

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:

Combine multiple fields into a single field.

Keywords:

combine, concatenate, recordpath

Configuration:

"Replacement Value Strategy" = "Record Path Value"

A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.

The value of the property uses the CONCAT Record Path function to concatenate multiple values together, potentially using other string literal values.

For example, to combine the title, firstName and lastName fields into a single field named fullName, we add a property with the name /fullName and a value of CONCAT(/title, ' ', /firstName, ' ', /lastName)



Use Case:

Change the value of a record field to an explicit value.

Keywords:

change, update, replace, transform

Configuration:

"Replacement Value Strategy" = "Literal Value"

A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.

The value of the property is the explicit value to set the field to. For example, we can set any field with a name of txId, regardless of its level in the data's hierarchy, to 1111-1111 by adding a property with a name of //txId and a value of 1111-1111



Use Case:

Copy the value of one record field to another record field.

Keywords:

change, update, copy, recordpath, hierarchy, transform

Configuration:

"Replacement Value Strategy" = "Record Path Value"

A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.

The value of the property is a RecordPath identifying the field to copy the value from.

For example, we can copy the value of /identifiers/all/imei to the identifier field at the root level, by adding a property named /identifier with a value of /identifiers/all/imei.



Use Case:

Enrich data by injecting the value of an attribute into each Record.

Keywords:

enrich, attribute, change, update, replace, insert, transform

Configuration:

"Replacement Value Strategy" = "Literal Value"

A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to place the result in.

The value of the property is an Expression Language expression that references the attribute of interest. We can, for example, insert a new field name filename into each record by adding a property named /filename with a value of ${filename}



Use Case:

Change the format of a record field's value.

Notes:

Use the RenameRecordField Processor in order to change a field's name.

Keywords:

change, update, replace, insert, transform, format, date/time, timezone, expression language

Configuration:

"Replacement Value Strategy" = "Literal Value"

A single additional property is added to the Processor. The name of the property is a RecordPath identifying the field to update.

The value is an Expression Language expression that references the field.value variable. For example, to change the date/time format of a field named txDate from year-month-day format to month/day/year format, we add a property named /txDate with a value of ${field.value:toDate('yyyy-MM-dd'):format('MM/dd/yyyy')}. We could also change the timezone of a timestamp field (and insert the timezone for clarity) by using a value of ${field.value:toDate('yyyy-MM-dd HH:mm:ss', 'UTC-0400'):format('yyyy-MM-dd HH:mm:ss Z', 'UTC')}.



System Resource Considerations:

None specified.

See Also:

ConvertRecord