Apache Nifi Expression language allows dynmic values in functional fields. This is a short reference to find useful functions and examples. For a full reference see the offical documentation .

Download a PDF version

Reserved Charecters

If these charecters are present in attribute names they need to be quoted $ | { } ( ) [ ] , : ; / * ' (space) \t \r \n
Ex. ${'a:attribute name'} ${"a:attribute name"}

Type Conversion

Coerces from one format to another

toString${ literal(2):toString():equals('2') } toNumber${ literal('2'):toNumber():equals(2) } toDecimal${ filesize:toDecimal() } plus${ fileSize:plus(10) } minus${ fileSize:minus(10) } multiply${ fileSize:multiply(10) } divide${ fileSize:divide(10) } mod${ fileSize:mod(10) } toRadix${ fileSize:toRadix(10) } isNull${ filename:isNull() } notNull${ filename:notNull() } isEmpty${ literal(''):isEmpty() } equals(string)${ filename:equals('value') } equalsIgnoreCase(string)${ filename:equalsIgnoreCase('value') } gt(number)${ fileSize:gt(64) } ge(number)${ fileSize:ge(64) } lt(number)${ fileSize:lt(64) } le(number)${ fileSize:le(64) } and(bool)${ fileSize:gt(64):and( ${fileSize:lt(128)} )} or(bool)${ fileSize:lt(64):or( ${fileSize:gt(128)} )} not${ filename:endsWith('csv'):not() } } ifElse('true val', 'false val')${ filename:endsWith('csv'):ifElse('is csv', 'is not csv') }

Encode/Decode Functions

${message: function() }

Functions: escapeJson, escapeXml, escapeCsv, escapeHtml3, escapeHtml4, unescapeJson, unescapeXml, unescapeCsv, unescapeHtml3, unescapeHtml4, urlEncode, urlDecode, base64Encode, base64Decode

Text Search

filename:equal('fizz buzz bazz.txt')

startsWith( string )${ filename:startsWith('fizz') } endsWith( string )${ filename:endsWith('txt') } contains( string )${ filename:contains('buzz') } in( string, string... )${ literal('NO'):in('NO','NOT') } indexOf( string )${ filename:indexOf('buzz') } 5 lastIndexOf( string )${ filename:lastIndexOf('z') } 13 find( regex )${ filename:find('.*zz') } matches( regex )${ filename:matches('fizz.*txt') } jsonPath( path )${ theJson:jsonPath('$.attribute') } format(format, zone )${ aDate:format('yyyy/MM/dd', 'GMT') } toDate(format, zone )${ literal('1999/12/31'):toDate('yyyy/MM/dd', 'GMT') } now()${now():toNumber() milliseconds since epoch toUpper${ filename:toUpper() } toLower${ filename:toLower() } trim${ literal('abc '):trim() } 'abc' substring( start , end )${ filename:substring(0, 3) } 'abc' substringBefore(string)${ filename:substringBefore('zz') } 'fi' substringBeforeLast(string)${ filename:substringBeforeLast('zz') } 'fizz buzz ba' substringAfter(string)${ filename:substringAfter('zz') } ' buzz bazz.txt' substringAfterLast(string)${ filename:substringAfterLast('zz') } '.txt' getDelimitedField( index, delimeter, quote char, escape char, strip char )${ filename:getDelimitedField(2, ' ') } buzz append(string)${ filename:append('.bck') } 'fizz buzz bazz.txt.bck' prepend(string)${ filename:prepend('a ') } 'a fizz buzz bazz.txt' replace(search, replace)${ filename:replace(' ','_') } fizz_buzz_bazz.txt replaceFirst(search, replace${ filename:(' ', '_') } fizz_buzz bazz.txt replaceAll(regex, replace)${ filename:replaceAll('(\w{4})\s', '!$1') } !fizz!buzzbazz.txt replaceNull(replace)${ idonotexist:('abc'):replaceNull('abc') } 'abc' replaceEmpty(replace)${ literal(''):replaceEmpty('abc') } 'abc' length${ filename:length() } 18 ${ ip() }local ip ${ hostname( bool ) }${ hostname(true) } fully qualified hostname ${ UUID() }unique generated UUID ${ nextInt() }system wide counter, not maintained through restart ${ literal(value) }${ literal(2):gt(1) } ${ getStateValue(key) }${ getStateValue('hash') } ${ thread() }Thread name anyAttribute('attr1', 'attr2'...)${ anyAttribute('bizz', 'bazz'):contains('value') } allAttributes('attr1', 'attr2'...)${ allAttributes('bizz', 'bazz'):contains('value') } anyMatchingAttribute(regex)${ anyMatchingAttributes('b.*zz'):contains('value') } allMatchingAttributes(regex)${ allMatchingAttributes('b.*zz'):contains('value') } anyDelineatedValue(value, delimiter)${ anyDelineatedValue(${literal('a-b-c')}, '-'):contains('a') } allDelineatedValues(value, delimiter)${ allDelineatedValues(${literal('a-b-c')}, '-'):contains('a) } false join(string)${ allAttributes('attr1', 'attr2'):join(', ') } count()