Apache Nifi Expression Language Cheat Sheet
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() } |
Mathematical
plus | ${ fileSize:plus(10) } |
minus | ${ fileSize:minus(10) } |
multiply | ${ fileSize:multiply(10) } |
divide | ${ fileSize:divide(10) } |
mod | ${ fileSize:mod(10) } |
toRadix | ${ fileSize:toRadix(10) } |
Logic Operators
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') } |
Date/Time
format is the java SimpleDateFormat
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 |
String Manipulation
filename:equal('fizz buzz bazz.txt')
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 |
Utilities
These subjectless functions provide useful utilities.
${ 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 |
Multiple Attributes
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() |