(1) insert into STAGING_TABLE
select (필드들..)
from SOURCE_TABLE
where (조건들...)
(10000건 인서트)
(2) update st
set colA = r1.colA
from STAGING_TABLE st
inner join REF_DATA1 r1 on st.col1 = r1.col1
(1000건 update)
(3) update st
set colA = r2.colB
from STAGING_TABLE st
inner join REF_DATA2 r2 on st.col2 = r2.col2
(100건 update)
select (필드들..)
from SOURCE_TABLE
where (조건들...)
(10000건 인서트)
(2) update st
set colA = r1.colA
from STAGING_TABLE st
inner join REF_DATA1 r1 on st.col1 = r1.col1
(1000건 update)
(3) update st
set colA = r2.colB
from STAGING_TABLE st
inner join REF_DATA2 r2 on st.col2 = r2.col2
(100건 update)
(1)번은 심플하다. OLE DB 원본으로 주욱 읽어들인다.
(2)도 쉽다. 조회 변환을 사용해서 REF_DATA1 을 읽고 오류 무시를 설정, 조인키는 col1, r1.colA를 조회 새로운 열 colA로 추가한다.
(3)도 쉬워보인다. 조회 변환, REF_DATA2 를 읽고 오류 무시, 조인키는 col2, r2.colB를 읽어서 (2)에서 추가한 colA에 대해서 바꾸기 colA 로 설정한다.
자 돌려보자!
이런-_-;;;;; (2) 에서 조회에 성공한 1000개의 REF_DATA1 의 값 colA가 몽땅 NULL로 바뀐 거시다!!!! ㅠ_ㅠ
이게 왜 그럴까?
그렇다.. (3) 에서 조회 성공한 100건에 대해서 colA의 값을 바꾸고 나머지 10000건 - 100건 의 데이터는 몽땅 NULL로 바꿔버리는 거시다... 이거때문에 한참 헤맸다. DB에 너무도 익숙해진 나머지 위의 조회 변환도 당연히 DB의 update 처럼 동작하는 것으로 착각한 것이다. 이걸 제대로 돌게 하려면 (3)에서 읽어들이는 값을 새로운 열 추가 colA_1 로 해놓고 파생열 변환에서 바꾸기 colA 열, !ISNULL(colA_1) ? colA_1 : ( !ISNULL(colA) ? colA : "N" ) 이런식으로 바꿔준다.
앞으로 이런 삽질을 얼마나 더 해야할까. 흑.
Posted by maceo

