RecordReaderFactory
Implementations: CSVReader
JsonPathReader
AvroReader
CEFReader
Syslog5424Reader
JsonTreeReader
WindowsEventLogReader
XMLReader
SyslogReader
JASN1Reader
ReaderLookup
ParquetReader
GrokReader
ScriptedReader
YamlTreeReader
ExcelReader
Supports Sensitive Dynamic Properties: No
Dynamic Properties allow the user to specify both the name and value of a property.
Name | Value | Description |
---|---|---|
A RecordPath. | The value to use to replace fields in the record that match the RecordPath | Allows 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) |
Name | Description |
---|---|
failure | If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship |
success | FlowFiles that are successfully transformed will be routed to this relationship |
Name | Description |
---|---|
record.index | This attribute provides the current row index and is only available inside the literal value expression. |
record.error.message | This attribute provides on failure the error message encountered by the Reader or Writer. |
Combine multiple fields into a single field.
"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)
Change the value of a record field to an explicit value.
"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
Copy the value of one record field to another record field.
"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
.
Enrich data by injecting the value of an attribute into each Record.
"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}
Change the format of a record field's value.
Use the RenameRecordField Processor in order to change a field's name.
"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')}
.