Data를 migration하는 것은 그리 유쾌한 작업이 아닙니다.

데이터를 분석하고 변환하여 옮기는 과정에 수차례의 실패를 각오해야 하는 신중한 작업이기 때문이죠. (사실 재미도 없습니다.)


많은 시스템에 자체적으로 제공한는 Import기능이 있지만,
저는 Excel을 이용하여 SQL구문을 만들고 이를 이용하여 데이터를 등록하는 방법을 선호합니다.


그 이유 중 하나는 실제 SQL구문을 실행한 뒤 에러가 발생했을 때, 이를 추적하기 쉽기 때문입니다.

또한, 추가적인 데이터를 등록할 때 재활용할 수 있는 점도 있습니다.



아래는 Oracle에 Insert할 때 사용했던 실제의 예제입니다.

=IF(L2="","NULL",CONCATENATE("TO_DATE('",TEXT(L2, "YYYY-MM-DD HH:mm:ss"),"','YYYY-MM-DD HH24:mi:ss')"))
=CONCATENATE(AL2," VALUES ('",A2,"','",B2,"','",C2,"','",D2,"');")


첫 번째 라인은 date 값을 column에 등록하기 위한 구문으로 변경하기 위해서 사용합니다.

두 번째 라인은 여러 cell의 값을 조합하여 실제 insert 구문을 만들기 위해서 사용합니다.


Datetime의 가공

Oracel의 경우 TO_DATE function으로 형변환이 필요합니다.

nullable column인 경우를 고려하여 값의 유무에 따른 분기처리가 또한 필요합니다.

Excel에서 date 값의 cell을 참조할 때 기본적으로 숫자로 취급하므로 이에 대한 방지 코드가 필요합니다.


IF

=IF({condition},{true case},{false case})

if function은 조건에 따른 분기 처리를 지원함. 위의 L2="", L2 cell이 empty인 경우를 의미하며 equal character가 하나인 것에 주의가 필요합니다.

TEXT

=TEXT({text},{format})

값의 포맷을 변경. 위의 TEXT(L2, "YYYY-MM-DD HH:mm:ss"), L2 값을 ToString() 처리합니다.


위 예의 결과는

TO_DATE('1980-06-26 00:00:00','YYYY-MM-DD HH24:mi:ss') 또는 NULL 이 됩니다.


Insert 구문의 작성

주로 INSERT ({columns}) VALUES ({values}); 구문의 {values} 쪽을 동적으로 작성하게 됩니다.


CONCATENATE

인자들을 combine하는 함수

=CONCATENATE(AL2," VALUES ('",A2,"','",B2,"','",C2,"','",D2,"');")

다만, 인자의 개수 및 길이에 제한이 있으므로 주의.

AL2는 static한 INSERT 구문이 있고 A2:D2까지의 값을 작은 따옴표로 감싸서 열거하였습니다.



※ H社의 Push 간 실제 작업에 활용한 결과물은 공용 drive에서 확인하세요.

'Database > Common' 카테고리의 다른 글

DA와 DBA의 업무 영역  (3) 2017.09.19

+ Recent posts