반응형


조회 변환에 Foreach 루프 컨테이너 설정하기

한대성

에이디컨설팅 책임 컨설턴트| SQLLeader.com 운영자

 

 조회 변환을 이용한 데이터 처리에서 언급한 대로 패키지에 Foreach 루프 컨테이너를 설정하는 것을 설명하겠습니다. 이 부분은 앞의 글에 비해서는 간단한 부분이며 기존에도 몇 번 다루었던 내용이기도 합니다. 참고용^^

 

만약 해당 패키지에서 입력되는 엑셀파일이 InputData.xls 하나만 있는 것이 아니라, 동일한 형태의 여러 엑셀 파일이 있을 경우입니다.

 

예제로 쓸 엑셀 파일 5개를 만들겠습니다. 엑셀 파일은 InputData.xls와 동일한 구조입니다.

이 때, 기존 파일인 InputData.xls은 지워줍니다..(유효성 경고 에러 설명을 위해^^)

 

우선 기존 패키지의 제어 흐름Foreach 루프 컨테이너를 추가하고, 읽어온 파일명을 저장할 문자형 변수를 추가합니다. 이 때 변수의 범위는 패키지 수준으로 합니다. 패키지 수준으로 변수 정의는 제어 흐름의 빈 영역을 클릭한 후에 변수를 추가하면 됩니다. 그런데 왜 패키지 수준(=전역 변수)로 설정해야 하느냐? 이 변수를 엑셀 연결에서 쓸 것이기 때문입니다.

, Foreach 루프 컨테이너에서 파일명을 읽어와서 변수에 저장되면, 이 변수를 이용한 식(Expression)으로 정의된 엑셀 연결에서 사용할 파일명을 바꾸게 되는 방식입니다. 이 변수가 Foreach 루프 컨테이너 범위에서 지정된 변수인 경우에는 엑셀 연결에서 쓸 수가 없습니다.

위와 같이 SourceFile 이라는 이름의 String형 변수를 추가하고, 아무 값이나 입력합니다.

그런 후, Foreach 루프 컨테이너를 더블 클릭해서 편집기를 연 후 다음과 같이 설정합니다.

본 예제에서는 D:\ InputData01.xls 형식으로 파일을 두었기 때문에 위와 같이 설정했습니다. 이 부분은 상황에 맞게 조절하세요~.

.. 그럼 읽어온 파일 이름 정보를 어디에다가 저장하도록 설정하는 부분입니다. 변수 매핑 탭으로 이동한 후, 앞에서 추가한 변수(SourceFile)를 지정합니다.

여기까지가 파일 이름(디렉토리 포함)을 읽어서 변수에 저장하도록 설정한 부분입니다. 파일이 10개이면 10번 돌면서 매 번마다 변수의 값을 바꾸겠죠?.

 

. 이제 연결 관리자에서 엑셀파일 연결을 선택한 후, 오른쪽에 있는 속성 창을 봅시다.

보아하니, ExcelFilePath 라는 속성에 파일 이름이 지정되어 있네요. 그럼 이 놈만 차례차례 바꿔주면 될낀데?(=될 것 같은데) 어뜨케?(=어떻게?)

아래에 있는 Expressions를 이용합시다. 이러한 경우에 사용하라고 제공되는 기능입니다~^^

Expressions를 선택하면 오른쪽에 버튼이 나타나고 클릭하면 아래와 같은 속성 식 편집기가 나타납니다. 속성 중에 ExcelFilePath를 선택합니다. 그런 후, 옆의 식 부분의 버튼을 클릭.

특별히 식 작성할 필요는 없겠지요? 그냥 단순히 @[사용자::SourceFile]이라는 변수만 지정하면 될 것 같네요.

 

확인을 눌러 식 작성기 및 편집 창을 다 닫아버리고 지금까지 구성된 패키지 한 번 봅시다.

 

 

Foreach 루프 컨테이너 속성도 설정해줬고, 엑셀파일 연결도 설정했는데 위와 같다면? 쌩뚱맞죠.. 넣어줍시다..데이터 흐름 작업을 컨테이너 안으로

 

이제 데이터 흐름 작업Foreach 루프 컨테이너가 도는 만큼(=반복 수행되는 만큼) 실행 될 것입니다. 진짜? 실행시켜 봅시다.

 

 

 

만약에 제가 한 순서대로 그대로 따라오셨다면, 위와 같이 에러를 출력하고 실행 안 되는 것이 정상입니다.^^

 

조놈은 모야~!!!!

 

SSIS의 특출난(@.@) 기능 중에 하나가 작업 수행 전 유효성 검사라는 것을 한다는 것입니다. , 작업을 시작하기 전에 『테이블은 있는지, 엑셀 파일은 있는지, 복사 시키려고 하는 열의 타입이나 크기는 맞는지 등등을 점검하는 단계입니다.

왜 할까요? 만약에 10단계의 초대형 작업을 수행합니다. 그런데 실수로 9단계나 10단계에서 입력할 테이블을 만들어놓지 않았네요.. 관리자가 수행하라고 해서 몇 날 몇 일을 수행했는데, 9단계 가서 테이블이 없어서 에러요~! 라고 실패해버립니다. 막막하죠.,...(제가 자주 경험했던 유형입니다.. 바보죠ㅎㅎ) 그래서 미리 돌기 전에 『테이블 없소~! 라고 경고 주는 것입니다.

 

그런데, 가끔씩 이 기능이 필요 없는 경우도 있겠죠? 지금과 같은 경우입니다. 지금은 엑셀 파일을 임의의 파일 이름으로 지정하였습니다. Foreach 루프 컨테이너가 돌면서 제대로 할당할 것이니깐요. 그런데 SSIS는 그 임의의 값을 파일명으로 생각하고 없다고 해버리네요. 허 참~! 이런 경우에 해 주는 작업이 Delay(=연기해라)+Validation(유효성(검사를)) =DelayValidation 속성입니다.

데이터 흐름 작업을 선택한 후 속성에서 DelayValidation 속성을 False에서 True로 바꿉니다.

 

그런 후, 수행하면 깜빡깜빡 거리면서 수행됩니다. 옆의 기분 나쁜 느낌표 마크는 유효성 경고인데, 무시하라고 했으니깐 무시하면 되겠지요^^

 

 

순식간이지만, 5개의 엑셀 파일이 모두 다 처리되었습니다.

 

확인은? 각자 해보시기 바랍니다..^^

 

궁금한 점이나 의문 사항은 댓글로 해주시길 바랍니다
반응형

+ Recent posts