[DTS] 데이터 로딩 과정에서 필터링 하기
한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
![]() |
현재 CSV파일을 DTS를 이용해서 디비에 저장하고있는데요. 이 CSV파일이 몇만건 되다보니까 부담스러워서 CSV파일 속의 데이터에 조건을 걸어서 걸러내고 디비에 넣고 싶은데요. 엑셀 파일은 쿼리가 바로 먹혀서 셀렉트 문으로 걸러서 저장했는데 CSV는 바로 걸러내기가 불가능한가요? 디비에 저장하고 거기서 다시 걸러내는 방법 밖에는 없는지... |
다음과 같은 예제 CSV 파일 중, DataGroup 열의 값이 D인 데이터만 테이블에 넣는 것을 SQL 2000 DTS 패키지로 구현하는 간단한 예를 설명 드리겠습니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/Img1.jpg)
전체 파일을 임시 테이블에 넣고선 DataGroup 열의 값을 비교해서 해당되는 데이터만 넣을 수도 있겠지만, 다음과 같이 넣는 과정에서 바로 필터링을 해서 넣을 수도 있습니다.
우선, 다음과 같이 CSV 파일에서 대상 테이블(본 예제에서는 tempdb.dbo.Sample)에 넣는 형태로 패키지를 구성합니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/222%5B2%5D.jpg)
데이터 변환 작업(검은색 선)을 더블 클릭해서 연 다음 원본, 대상, 변환 탭을 클릭해서 적절히 열을 매핑시킵니다. 이 때 이름을 이용해서 자동으로 매핑하게 됩니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/333%5B2%5D.jpg)
변환 탭의 아래에 있는 모두 선택(S) 버튼을 클릭해서 열 들을 모두 선택한 후, 모두 삭제(A)를 선택해서 현재 자동으로 설정된 연결들을 제거합니다. 그런 다음, (모두 선택되어 있는 상태에서)중간에 있는 새로 만들기(W) 버튼을 클릭한 후, 새 변환 만들기 창에서 ActiveX Script를 선택합니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/444%5B2%5D.jpg)
이어서 나타나는 변환 옵션 창에서 속성(P) 버튼을 클릭하면 자동으로 현재 변환에 대한 ActiveX Script가 생성되며 스크립트를 이용할 수 있는 창이 나타납니다.
여기서 다음과 같이 스크립트를 변경합니다.
[기존]
'********************************************************************** ' Visual Basic Transformation Script '************************************************************************
' 각 원본 열을 대상 열로 복사합니다. Function Main() DTSDestination("Val") = DTSSource("Val") DTSDestination("DataGroup") = DTSSource("DataGroup") DTSDestination("Seq") = DTSSource("Seq") Main = DTSTransformStat_OK End Function |
[변경]
'********************************************************************** ' Visual Basic Transformation Script '************************************************************************
' 각 원본 열을 대상 열로 복사합니다. Function Main()
DTSDestination("Val") = DTSSource("Val") IF DTSSource("DataGroup") = "D" THEN DTSDestination("DataGroup") = DTSSource("DataGroup") ELSE Main = DTSTransformStat_SkipRow Exit Function END IF
DTSDestination("Seq") = DTSSource("Seq") Main = DTSTransformStat_OK End Function |
이와 같이 변경한 후, 스크립트 편집 창을 닫으면 다음과 같이 변환의 모양이 바뀝니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/555%5B1%5D.jpg)
자, 테스트 해 봅시다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/666%5B3%5D.jpg)
전체 데이터인 10000 건이 옮겨진 것처럼 보입니다. 하지만 실제 대상 테이블에는 아래와 같이 DataGroup이 “D”인 데이터만 들어가 있습니다.
![](http://www.sqlleader.com/Pds/Board/SS2005SSIS/Editor/777%5B2%5D.jpg)
이와 같은 방식으로 DTS에서도 임시 테이블을 사용하지 않고 읽어오는 과정에서 대상을 필터링 또는 변환할 수 있습니다. 참고로, 이와 같은 부분이 바로 SQL 2005 SSIS의 데이터 흐름 작업 부분입니다.
|
||||
|
||||
|
||||
|
||||
|
'연구개발 > DTS & SSIS' 카테고리의 다른 글
자식 패키지의 연결 정보 변경하기 (0) | 2011.08.27 |
---|---|
스크립트 변환에서 오류 처리하기 (0) | 2011.08.27 |
동일한 구조의 테이블로 결과 보내기 (0) | 2011.08.27 |
FTP 작업에서 파일 없는 경우 처리 방법 (0) | 2011.08.27 |
스크립트 변환을 이용한 문자열 분리 (0) | 2011.08.27 |