패키지 외부에서 데이터 원본 및 대상 설정하기
한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
Question
다음과 같이 GroupA, GroupB, GroupC 라는 디렉터리에 여러 텍스트 데이터 파일들이 있는 경우를 가정합니다.
각각의 텍스트 파일은 동일한 열을 가집니다.
그리고 대상 테이블로 TableA, TableB, TableC가 있습니다.
USE TEMPDB GO
CREATE TABLE TABLEA ( [Group] varchar(20), [File] varchar(20), Qty INT, Amount Money ) GO
CREATE TABLE TABLEB ( [Group] varchar(20), [File] varchar(20), Qty INT, Amount Money ) GO
CREATE TABLE TABLEC ( [Group] varchar(20), [File] varchar(20), Qty INT, Amount Money ) GO |
본 예제에서 만들려고 하는 기능은, 단순히 텍스트 파일에서 대상 테이블로 넣는 패키지를 만든 후, 패키지를 실행할 때 텍스트 파일과 대상 테이블 지정할 수 있는 것을 구현하고자 합니다.
빈 패키지에 위에서 만든 데이터베이스에 대한 OLE DB 연결을 추가합니다.
또한, 연결 관리자 내부에서 마우스 오른쪽을 클릭해서 나타나는 메뉴 중 새 플랫 파일 연결(A)를 선택한 후, 아래와 같이 연결 관리자 이름 및 파일 이름을 지정합니다. 파일 이름은 준비된 데이터 파일들 중 아무거나 선택합니다.
이제 열 탭을 클릭한 후, 텍스트 파일에 대한 행/열 구분 기호를 확인하고, 고급 탭을 클릭해서 각 열에 대한 이름과 유형을 설정합니다.
Group 및 File은 길이 20의 String형으로 설정하고 Qty 및 Amount는 부호 없는 4바이트 정수로 설정합니다.
자, 이제 도구 상자에서 데이터 흐름 작업을 추가한 후, 다음과 같이 파일로부터 대상 테이블에 넣는 기능을 간단히 구현합니다.
(이 부분은 간단히 넘어가겠습니다. 이전의 예제들을 참고하시기 바랍니다.)
자, 여기까지 해서 간단히 기능을 구현하였습니다.
이제부터 동적으로 패키지를 구현할 수 있는 기능들을 추가해 보도록 합시다.
우선, 제어 흐름을 클릭한 후, 제어 흐름 영역의 빈 곳을 클릭하고선, 마우스 오른쪽 버튼을 눌러서 나타나는 메뉴 중 에서 변수(S)를 클릭하여 변수 설정 창을 띄웁니다.
아래와 같이 SourceFile 및 TargetTable 이라는 두 개의 String형 변수를 추가합니다. 이 때, 값에다가는 임시로 File 명과 Table 명을 입력하도록 합니다.
패키지 외부에서 이 변수에 값을 할당하면 이 변수들이 텍스트 원본 및 대상 테이블에 지정이 되는 방식으로 구현할 것입니다.
일단 위와 같이 추가했으면, 연결 관리자의 SourceFile이라는 연결을 선택한 후, 오른쪽에 있는 속성 창의 여러 항목 중 Expressions 부분에 있는 ... 버튼을 클릭합니다.
속성을 ConnectionString을 선택하고, 옆의 식 부분에서 ... 버튼을 클릭해서 나타나는 식 작성기 창에서 아래와 같이 @[사용자::SourceFile] 이라는 변수를 추가하고 확인을 누릅니다.
이제, 데이터 흐름 작업을 더블 클릭한 후 나타나는 데이터 흐름 영역에서 OLE DB 대상을 클릭해서 OLE DB 대상 편집기를 엽니다.
데이터 액세스 모드(A) 부분을 아래와 같이 『테이블 이름 또는 뷰 이름 변수』로 변경하고 아래의 변수 이름(V) 부분에 위에서 추가한 TargetTable이라는 변수로 지정합니다.
자, 이제 패키지가 완성되었습니다. 이 패키지를 D:\Sample.dtsx 라는 이름으로 저장하도록 하겠습니다.
우선 패키지를 그냥 실행시키면 기본값으로 지정된 D:\Directory\GroupA\Desktop3.txt 파일로부터 tempdb.dbo.TableA로 입력됩니다.
만약, D:\Directory\GroupB\Keyboard3.txt 이라는 파일을 tempdb.dbo.TABLEB라는 테이블로 입력하고 싶다면 다음과 같이 설정하면 됩니다.
우선 D:\Sample.dtsx 패키지를 더블 클릭해서 패키지 실행 유틸리티(DTEXECUI)를 띄웁니다.
값 설정 탭을 클릭한 후, 다음과 같이 속성과 값을 추가합니다.
속성 경로 |
값 |
\Package.Variables[사용자::SourceFile].Properties[Value] |
D:\Directory\GroupB\Keyboard3.txt |
\Package.Variables[사용자::TargetTable].Properties[Value] |
tempdb.dbo.TABLEB |
일단, 이와 같이 설정한 후 패키지를 실행합니다.
자, 그럼 매번 이렇게 해야 할까요? 조금 편하게 설정합시다. (배치 파일로 만들어서 사용하기)
패키지 실행 유틸리티 창에서 가장 아래에 있는 명령줄 탭을 클릭해서 나타나는 명령줄을 확인합니다.
/FILE "D:\Sample.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING EWCDI /SET "\Package.Variables[사용자::SourceFile].Properties[Value]";"D:\Directory\GroupB\Keyboard3.txt" /SET "\Package.Variables[사용자::TargetTable].Properties[Value]";"tempdb.dbo.TABLEB" |
위와 같은 긴 명령줄이 생성되었습니다. 이를 어디에 이용하느냐..
dtexec.exe 라는 커맨드 형식의 패키지 실행 유틸리티가 있습니다.
아래와 같이 배치 파일을 만들어서 사용하면 됩니다.
SQL Agent의 작업으로 등록할 때에도 위와 비슷합니다. 작업 유형 부분에서 Integration Services 패키지를 선택하면 위와 같이 패키지의 여러 속성을 설정할 수 있는 탭이 나타나며, 이 중 값 설정 부분에서 원하는 속성을 설정하면 됩니다.
본 게시판에 실린 글은 누구나 복사하셔서 이용하셔도 되지만, 반드시 출처(SQLLeader.com) 및 링크를 밝혀주셔야 합니다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
파일에 저장된 쿼리를 데이터 원본에서 사용하기 (0) | 2011.08.27 |
---|---|
Foreach 루프 컨테이너를 이용한 패키지 반복 실행 (0) | 2011.08.27 |
루핑 처리 방법 (0) | 2011.08.27 |
동적 대상 설정하기 (0) | 2011.08.27 |
스크립트 변환을 이용한 RowNumber 및 파생열 만들기 (0) | 2011.08.27 |