728x90

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 까지 지정해줬다.

 

 

 

 


 

 

더 많은 방법이 있겠지만

최대한 간단히 적은 프로세서를 사용해서 만들어봤다.

+ Recent posts