nifi updaterecord로 특정 column의 값이 null 일 경우 다른 값으로 대체하는 작업을 수행해봄
또한 "yyyy-MM-ddTHH:mm:ssZ" format의 문자열을 yyyy-MM-dd HH:mm:ss로 변환하고 9시간을 더해봄
apache nifi 1.9.2와 cloudera cfm nifi 1.13.2 버전에서 테스트하였음.
GenerateFlowFile을 사용해 테스트 데이터를 생성함.
a,b
2022-03-03T08:15:00Z,testString
2022-03-03T08:15:00Z,
apache nifi 1.9.2
apache nifi 1.9.2에서는 coalesce function을 지원하지 않는 것으로 파악된다.
결국 UpdateRecord를 2번 쓰는 방법으로 coalesce를 구현함
뭔가 더 좋은 방법이 있을 것 같지만 나중에 시간날 때 고민해봐야겠음
- GenerateFlowFile
테스트 데이터를 생성함.
- UpdateRecord
Replacement Value Strategy을 Record Path Value로 함
Replacement Value Strategy | Record Path Value |
/test | /b |
b 칼럼과 동일한 값을 가진 test라는 칼럼을 추가하였음
- UpdateRecord
Replacement Value Strategy | Literal Value |
/test | ${field.value:isEmpty():not():ifElse(${field.value},${literal("empty")})} |
/a | ${field.value:toDate("yyyy-MM-dd'T'HH:mm:ss'Z'"):plus(32400000):format("yyyy-MM-dd HH:mm:ss")} |
${field.value:isEmpty():not():ifElse(${field.value},${literal("empty")})}는 test 칼럼의 value가 비어있지 않으면 ${field.value} 즉 기존에 가지고 있던 값을 그대로 넣고, 비어있으면 empty라는 문자로 value를 대체한다는 의미이다.
${field.value:toDate("yyyy-MM-dd'T'HH:mm:ss'Z'"):plus(32400000):format("yyyy-MM-dd HH:mm:ss")}는
"yyyy-MM-dd'T'HH:mm:ss'Z'" 형태의 문자를 date type으로 인식시킨 후 9시간을 더해 "yyyy-MM-dd HH:mm:ss" format으로 변환한다는 의미이다.
최종적으로 테스트 데이터가 다음과 같이 변환되었음
a,b,test
2022-03-03 17:15:00,testString,testString
2022-03-03 17:15:00,,empty
cloudera cfm nifi 1.13.2
coalesce function을 지원하므로 해당 function을 사용한다.
- GenerateFlowFile
테스트 데이터를 생성함.
- QueryRecord
query | select a, b, COALESCE(b,'empty') as c from flowfile |
COALESCE function을 사용해 b 칼럼의 값이 비어있으면 empty 문자열로 대체하고, 비어있지 않으면 b 칼럼의 값을
넣는다.
- UpdateRecord
Replacement Value Strategy | Literal Value |
/a | ${field.value:toDate("yyyy-MM-dd'T'HH:mm:ss'Z'"):plus(32400000):format("yyyy-MM-dd HH:mm:ss")} |
${field.value:toDate("yyyy-MM-dd'T'HH:mm:ss'Z'"):plus(32400000):format("yyyy-MM-dd HH:mm:ss")}는
"yyyy-MM-dd'T'HH:mm:ss'Z'" 형태의 문자를 date type으로 인식시킨 후 9시간을 더해 "yyyy-MM-dd HH:mm:ss" format으로 변환한다는 의미이다.
timestamp 변환도 QueryRecord에서 한번에 하는 게 가장 깔끔할 것 같은데, 시간 될 때 ansi sql로 timestamp 형변환하고 시간 더하는 걸 테스트해보고 추가적으로 테스트 해봐야할 것 같음
최종적으로 테스트 데이터가 다음과 같이 변환되었음
a,b,test
2022-03-03 17:15:00,testString,testString
2022-03-03 17:15:00,,empty
'NIFI' 카테고리의 다른 글
PrometheusReportingTask (0) | 2023.07.21 |
---|---|
cloudera manager에 nifi cfm 2.1.2 서비스 추가하는 방법 (0) | 2022.03.21 |
nifi mergerecord로 여러 개의 flowfile 하나로 병합하기 (0) | 2022.03.02 |
nifi invokehttp로 ssl 적용된 https 페이지에서 데이터 가져오기 (0) | 2022.03.01 |
nifi template (0) | 2022.02.27 |
댓글