이번 장부터는 Apache nifi 표현 언어 가이드 docs 내용을 번역하여 기술하겠습니다.
개요
아파치 nifi의 모든 데이터는 플로우파일이라는 추상화로 표현됩니다. 플로우파일은 두 가지 주요 요소로 구성됩니다.
내용(content)과 속성(attributes)으로. 플로우 파일의 내용 부분은 작업 대상인 데이터를 나타내고, 속성 부분은 데이터 자체 또는 메타데이터에 관한 정보를 나타냅니다.
속성은 데이터에 대해 알려진 정보와 데이터를 적절하게 라우팅 하고 처리하는데 유용한 정보를 나타내는 키-값 쌍입니다.
로컬 파일 시스템에서 가져온 파일의 예를들면, 플로우파일에는 파일 시스템의 파일 이름을 의미하는 filename이라는 속성이 있습니다. 또한 플로우파일에는 이 파일이 위치한 디렉토리를 반영하는 path 속성도 있습니다. 또한 플로우파일에는 고유 식별자인 uuid라는 속성도 있습니다.
nifi 표현언어를 사용하면 이러한 속성을 참조하고, 다른 값과 비교하며, 값을 조작할 수 있습니다.
NiFi 식의 구조
nifi 표현 언어는 항상 시작 구분자 ${ 로 시작하고 종료 구분자 } 로 끝납니다.
시작과 종료 구분자 사이에는 표현식의 텍스트가 위치합니다. 가장 기본적인 형태에서는 표현식의 속서이 이름만 구성할 수 있습니다. 예를 들어 ${filename}은 filename 속성의 값을 반환합니다.
조금 복잡한 예로는 toUpper 함수를 호출하여 사용한 ${filename:toUpper()} 의 경우로 예를 들 수 있습니다.
다양한 목적을 위해 여러 가지 함수가 지원되는데 이에는 equals나 matches 같은 함수도 있습니다.
- $ (dollar sign)
- | (pipe)
- { (open brace)
- } (close brace)
- ( (open parenthesis)
- ) (close parenthesis)
- [ (open bracket)
- ] (close bracket)
- , (comma)
- : (colon)
- ; (semicolon)
- / (forward slash)
- * (asterisk)
- ' (single quote)
- (space)
- \t (tab)
- \r (carriage return)
- \n (new-line)
경우에 따라 두 속성 값을 비교할 수도 있습니다. 이 때는 내장된 표현식을 사용합니다. 예를 들어 ${filename:equals(${uuid})}와 같이 사용하면 filename과 uuid 속성을 비교할 수 있습니다.
응용 프로그램의 표현식 언어
표현 언어를 사용하여 속성 이름으로 참조할 때, nifi는 값이 있는 곳을 찾기 위해 정의된 계층 구조를 따라 동작합니다.
nifi의 현재 계층 구조는 다음과 같습니다.
- 속성/키를 찾기 위해 플로우 파일 검색
- 속성/키를 찾기 위해 프로세스 그룹 변수 검색
- 속성/키를 찾기 위해 파일 레지스트리 파일 검색
- 속성/키를 찾기 위해 nifi JVM 속성 검색
- 속성/키를 찾기 위해 시스템 환경 변수 검색
nifi는 일치하는 속성이나 키의 첫 번째 발견된 항목을 반환합니다. 일치하는 항목이 없을 경우에는 null을 반환합니다.
표현식 언어 이스케이프
nifi 애플리케이션에는 프로세서 속성을 구성하는데 표현언어가 많이 사용됩니다.
애플리케이션에서 구성 요소 속성을 구성할 때, 사용자 인터페이스는 속성 이름옆에 정보 아이콘을 제공합니다.
마우스로 해당 아이콘 위로 올리면 해당 속성에 대한 유용한 정보를 제공하는 툴팁이 표시됩니다.
속성에 대한 설명, 기본 값이 있는경우, 과거에 구성된 값인 경우 표현언어의 평가 범위에 포함됩니다.
평가 범위는 NONE → VARIABLE_REGISTRY → FLOWFILE_ATTRIBUTESfh 표현언어의 평가 범위는 계층적입니다.
- NONE: 이 속성은 표현 언어를 지원하지 않습니다.
- VARIABLE_REGISTRY: 다음과 같은 계층적 구조로 구성됩니다.
- 프로세스 그룹 수준에서 정의된 변수 및 루트 프로세스 그룹까지 재귀적으로 정의된 변수들
- nifi.properties 파일의 nifi.variable.registry.properties 속성을 통해 사용자 지정 속성 파일에서 정의된 변수들
- JVM 래벨의 환경 변수 및 시스템 속 - FLOWFILE_ATTRIBUTES: 각 개별 FlowFile의 속성 및 위에서 설명한 Variable Registry에 정의된 변수를 사용합니다.
표현식 언어 편집기
속성이 표현식 언어를 지원하지만 사용자가 리터럴 값을 사용하려는 경우도 있습니다. 일반적으로 표현식 언어와 동일한 구문을 따릅니다. 예를 들어 사용자가 다음과 같이 속성을 구성할 수 있습니다.
표 1. EL 이스케이프 예제
Expression | Value | Notes | |
${abc} | xyz | ||
$${abc} | ${abc} | ||
$$${abc} | $xyz | ||
$$$${abc} | $${abc} | ||
$$$$${abc} | $$xyz | ||
I owe you $5 | I owe you $5 | 실제 표현식이 없습니다. | |
You owe me $$5 too | You owe me $$5 too | $ 문자는 Expression 바로 앞에 오지 않으므로 이스케이프되지 않습니다. | |
Unescaped $$${5 because no closing brace | Unescaped $$${5 because no closing brace | 닫는 중괄호가 없기 때문에 실제 표현식이 없으므로 $ 문자는 탈출 | |
Unescaped $$${5} because no closing brace | 오류 | 이 식은 이스케이프된 $와 같기 때문에 유효하지 않으며 그 뒤에 와 유효한 식이 아닙니다. 숫자 이스케이프해야 합니다.${5}${5} | |
Unescaped $$${'5'} because no closing brace | Unescaped $ because no closing brace |
명명된 특성이 없으므로 Expression이 빈 문자열로 평가됩니다. 닫는 중괄호가 없기 때문에 $가 이스케이프되지 않습니다 |
표현식 언어 편집기
프로세서 속성의 값을 구성할 때, nifi 사용자 인터페이스는 표현 언어에 대한 도움말을 제공하기 위해 표현 언어 편집기를 제공합니다. ${ 로 시작하는 표현식을 입력하면, 편집기는 여는 괄호나 중괄호를 강조하여 사용자가 어떤 여는 괄호나 중괄호가 어떤 다는 괄호나 중괄호와 매칭되는지 쉽게 확인할 수 있도록 도와줍니다.
또한 편집기는 커서 위치에서 사용 가능한 모든 함수 목록을 제공하여 문맥에 맞는 함수를 사용할 수 있도록 도움을 줍니다. Ctrl+Space를 눌러 해당 접두사로 시작하는 모든 함수 목록을 볼 수도 있습니다.
여기까지 표현 언어에 대한 기본적인 설명과 개념을 다뤘습니다.
다음 장에서는 함수, 부울 논리, 문자열 조작 등을 살펴보겠습니다.
'빅데이터 > Apache Nifi' 카테고리의 다른 글
Apache NiFi 표현 언어 가이드(3) (0) | 2023.12.14 |
---|---|
Apache NiFi 표현 언어 가이드(2) (0) | 2023.12.12 |
Apache nifi 사용 안내서(2) (0) | 2023.12.07 |
Apache nifi 사용 안내서(1) (1) | 2023.12.07 |
Apache nifi 시작 안내서(3) (1) | 2023.12.06 |