Project/국토교통 온라인 해커톤 2020

DB에 다양한 파일형식 로드하기 feat. dat 파일

다양한 데이터 형식

데이터 분석 공부를 시작한 뒤 내가 줄곧 다뤘던 파일 .csv 형식이다. 하지만 세상에는 다양한 파일 형식이 존제하고, 이를 간과했던 나는 대회 중 .dat 형식의 파일을 처음 접해 난관을 겪었다. dat 파일을 오라클에 업로드 하기 위해서 Oracle Developer에서 제공하는 import 기능을 사용하려 했으나 실패했다. 그래서 방법을 찾던 중 SQL*Loader를 사용하는 업로드 방식에 대해 알게 됬다.

 

과정

1. Oracle Instant client를 설치한다.

- Oracle Instant client 설치 시 자동으로, SQL*Plus와 SQL*Loader가 설치된다.

 

2. 데이터를 임포트할 계정에 테이블 스키마를 생성한다.

- .dat파일의 레코드가 각 행에 입력될 수 있도록 Data Type과 도메인 등을 설정한다.

 

3. SQL*Loader가 사용할 수 있는 .ctl파일을 생성한다.

- 메모장에 아래와 같이 기재하고, 확장자를 .txt에서 .ctl로 변경한다.

 

4. SQL*Loader를 실행해 데이터를 임포트한다.

- SQL*Loader는 Key=Value 쌍으로 옵션을 전달한다.

- Oracle Instant client의 위치를 Path 환경변수에 지정해놓아야 한다.

 

작성 코드
/* 코드설명
option(skip = ?)은, 맨 위에서 몇 줄을 건너뛸 지에 대한 옵션으로, 첫 줄에 컬럼명이 있는 경우 1을 기재한다.
load data는, control 파일에 사용되는 코드이다.
characterset 뒤에는, 문자열 encoding 방식을 지정한다. (통상 UTF8을 사용한다.)
infile 뒤에는 임포트하고자 하는 .dat파일의 경로를 지정한다.
discardfile 뒤에는, 위 작업을 수행할 때 오류가 난 행들을 저장하는 파일을 지정한다.
discardmax 뒤에는, 오류가 몇 번 발생했을 때 작업을 중지할 지 옵션을 지정한다.
append는, 기존 테이블의 뒤에 데이터를 추가하는 옵션이다.
into table 뒤에는 임포트하고자 하는 타겟 테이블의 이름을 기재한다.
fields termianted by "|"는 구분자가 "|"임을 명시한다.
trailing nullcols는 null인 데이터도 삽입할 때 사용하는 옵션이며, 
이후에는 데이터를 추가하려는 테이블의 컬럼명을 기재한다.
*/

options(skip =0)  
load data
characterset UTF8
infile 'C:\Users\acorn\Downloads\CARD_0001\DD_AREA.dat'
discardfile 'C:\Users\acorn\Downloads\CARD_0001\DD_AREA.dis'
discardmax 999
append
into table DD_AREA
fields terminated by '|'
trailing nullcols
(
  col1,
  col2,
  col3
)

-- 과정 4번에 대한 코드

C:>sqlldr userid= acorn/oracle@pdb control ='C:\Users\acorn\Downloads\DJA01.ctl'

/*코드설명
sqlldr는 SQL*Loader의 실행 명령어이다.
userid = 에는 계정/비밀번호@DB를 지정한다.
control = 에는 .ctl파일의 위치를 기재한다.
*/