1. 목적
CSV 데이터를 가져와서, DB type 변형없이 Database 에 적재하기 위함.
2. 프로세스
적재 중 CSV 내의 timestamp 와 같은 컬럼의 데이터를 DB로 적재 시 type 을 못 읽는 오류가 발생하는데,
(ERROR: column "column2" is of type timestamp without time zone but expression is of type character varying
Hint: You will need to rewrite or cast the expression.)
위의 해결을 위해선 두 가지 방법이 존재함.
(1) tmp 임시테이블 생성 → column type 모두 varchar → csv 데이터 그대로 적재 → 본 테이블에 쿼리로 캐스팅하여 적재 ( insert into test select cast(reg_dtm as timestamp) from test_tm,p ) → 임시테이블 truncate
(2) nifi 상에서 프로세서를 통해 type 을 변경하여 본테이블에 바로 적재
이 글에선 (2) 의 방법을 기술함.
nifi ver.2.0
3. 상세 설명
(1) GetFile

Input directory 밑의 경로에 있는 File Filter 의 파일을 찾아서 가져오기.
(t_emal~ 로 시작하는 csv 형식의 파일을 가져온다.)
(2) ConvertRecord
: 다양한 입력 데이터 포맷을 다른 포맷으로 변환하는 기능을 제공

CSV 데이터를 JSON으로 변환하기.
다음단계에서 DB 에 insert 할 때 type 지정해줄 것이기 때문에
Reader, Writer 모두 default 그대로 사용.
(3) PutDatabaseRecord

DB Type, DB Connection pool, schema, table name 등 입력.

JsonRecordSetWriter 에서 timestamp 형식을 지정해준다.
필자는 timestamp 데이터가 밀리세컨드단위까지 있어서 ss.SSS 까지 지정해줬다.
더 많은 방법이 있겠지만
최대한 간단히 적은 프로세서를 사용해서 만들어봤다.
'Data Engineering > Nifi' 카테고리의 다른 글
[Nifi 2.0] 이전 버전의 Template 기능 활용하는 법 (0) | 2024.08.13 |
---|---|
[Nifi 2.0] PutHive3QL / SelectHive3QL 실행 (Hive3ConnectionPool) (0) | 2024.07.16 |
[Nifi] JsonRecordSetWriter - Properties / Output Grouping 옵션 (0) | 2024.04.02 |
[Nifi] Relationship 설정 (0) | 2024.04.02 |