ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • nifi 로 여러개 파일 내용 병합하기 (merge record)
    HOWTO 2020. 9. 22. 19:36

    오브젝트 스토리지에 매일 데이터를 쌓긴 하는데 같은 구조를 가진 컨텐츠라면 하나의 파일로 관리하는 것이 용이할 때가 있다. 

    nifi의 MergeRecord 프로세서를 이용해서 api 를 통해 매일 csv 형태로 떨궈둔 파일의 내용을 새로운 csv 파일에 기록하고 생성할 수 있다. 

     

    파일을 merge 해서 오브젝트 스토리지에 업로드 하기 위한 전체 flowfile

     

    1. ListS3

    앞에서 네이버클라우드플랫폼의 오브젝트스토리지에 파일을 올렸기때문에 파일의 리스트로 네이버클라우드플랫폼의 오브젝트스토리지에서 가져온다. Endpoint URL 을 한국 리전의 오브젝트스토리지 endpoint 로 입력해 주고, (네이버클라우드플랫폼은 리전별로 엔드포인트 URL 이 다르다 ㅠㅠ) 파일을 가져올 버킷명을 적어준다. Region 항목은 AWS S3 에서 파일을 가져올 때 선택하면 되고, 네이버클라우드플랫폼 처럼 S3 API 를 호환해서 사용하는 경우에는 Endpoint URL 만 참고한다. 

    ListS3 Processor 설정

     

    2. FetchS3Object

    가져올 파일을 정의한다. 버킷 안에 있는 모든 파일을 가져올것이라서 Object Key 에 ${filename} 으로 적었다. 나머지 부분은 ListS3 와 동일하다. 

    3. MergeContent

    이 flowfile 의 핵심이다. 하지만 크게 설정할 것은 없고 아래와 같이 값을 선택하기만 하면 된다. 

    Correlation Attribute Name 에 ${ARN} 이라고 적기는 했지만 이런 저런 테스트를 해보느라고 적어둔 것일 뿐 사실 이 부분은 영향이 없었다. 기재하지 않아도 상관없다. 

    MergeContent 에서 가장 중요한 부분은 Merge 한 파일만 오브젝트스토리지에 적용할 수 있도록 Relationship 을 Merged 만 선택하는 부분이라고 할 수 있다. 바보같게도 나는 이 부분을 고려하지 못하고 Merge 된 파일만 오브젝트 스토리지에 업로드 하기 위해 수많은 시도를 해보며 수많은 시간을 낭비했다. 모든 것을 포기하려 했을 때 갑자기 스스로 깨닫고는 내가 너무 한심했다. 

    여러분은 이 연결 부분의 중요성을 간과하지 마시길 !! merged! merged! 

    이 연결 부분에 모든 relationship 항목을 다 선택하면 fetch 로 가져온 파일 + merge 된 파일을 순차적으로 오브젝트스토리지에 업로드 하게 되서 file merge 에 성공했음에도 어떨때는 오브젝트스토리지에 merge 된 파일이.. 어떨때는 fetch 한 파일이 그대로 업로드 되어 있어 허탈하게 만들곤 했다. 

     

     

    4. UpdateAttribute

     이 processor 에서는 오브젝트스토리지에 업로드 할 파일명을 정의해준다. 내가 하려는 로직에서는 굳이 필요치 않을 수도 있는데 다른 사람들의 예제에 UpdateAttribute 가 꼭 들어가 있기에 나도 넣어줬다. 사실 변수는 정의하고 뒤에서 받지 않으면 그만이라 .. 

     

    5. PutS3Object

    PutS3Object 는 앞에서도 설명했으므로.. 파일을 업로드 할 Bucket 명을 적어주고, Endpoint URL 을 입력하는 것이 중요하다. 

     

     

    반응형

    댓글

Designed by Tistory.