반응형
반응형


따라하기 - 검사점 사용하기

 

검사점 기능을 이용하여 패키지 운영 중 에러가 발생했을 때의 처리 상황에 대한 예를 구현해 봅니다.

 

1.       빈 패키지 파일을 하나 추가한 후, 연결 관리자에서 OLE DB 연결을 하나 추가합니다. 이 때, 서버 및 DB는 임의로 지정합니다.

 

2.       도구 상자에서 네 개의 SQL 실행 작업을 추가한 후, 이름을 SQL 실행 작업 1”, … , “SQL 실행 작업 4로 변경한 후, 각각의 SQL 실행 작업 편집기에서 다음과 같이 설정합니다.
Connection              - <1
에서 추가한 OLE DB 연결>
SQLStatement            – SELECT 1/10



 

3.       네 개의 작업들을 차례대로 연결합니다.

 

4.       네 개의 작업들을 모두 선택한 후, 속성에서 FailPackageOnFailure 의 값을 True로 설정합니다. 각 작업들을 선택해서 하나씩 변경해도 되지만, 작업의 수가 많은 경우, 이와 같이 일괄적으로 변경할 수도 있습니다.



 

5.       제어 흐름 영역의 빈 곳을 클릭한 후, 속성 창에서 다음과 같이 설정합니다.
CheckpointFileName  - D:\CheckPoint.chk
CheckpointUsage      - IFExists
SaveCheckpoints       - True



 

6.       [테스트 시나리오 1] 정상인 경우
패키지를 수행한 후, 정상적으로 수행되는 지를 확인합니다.



 

7.       [테스트 시나리오 2] 임의 에러 발생
SQL
실행 작업 3SQLStatement를 다음과 같이 변경한 후, 패키지를 실행합니다.
SQLStatement            – SELECT 1/0



SQL
실행 작업 3에서 작업이 실패가 되었으며, D:\CheckPoint.chk 라는 이름의 Checkpoint 파일이 생성되었습니다.



 

8.       [테스트 시나리오 2’] 에러 발생 후, 재 수행
에러가 난 부분을 수정하지 않고 패키지를 다시 수행합니다.



SQL
실행 작업 3에서 작업이 실패나 난 후, 이 정보가 CheckPoint.chk 파일에 저장이 되어 있으며, 이전 작업들은 처리되었기 때문에 다시 수행하더라도 SQL 실행 작업 1 SQL 실행 작업 2는 다시 실행되지 않고 SQL 실행 작업 3부터 실행됩니다.

 

9.       [테스트 시나리오 3] 에러 수정 후, 재 수행
SQL
실행 작업 3SQLStatement를 다시 SELECT 1/10 으로 수정한 후, 패키지를 실행합니다.



작업이 실패했었던 SQL 실행 작업 3부터 정상적으로 나머지 작업들이 수행됩니다. 패키지가 정상적으로 수행되면 자동으로 Checkpoint 파일은 삭제됩니다. 이제 다시 패키지를 수행하면 정상적으로 SQL 실행 작업 1부터 수행됩니다.

 

반응형

'연구개발 > DTS & SSIS' 카테고리의 다른 글

기본 강좌 44 - 데이터 흐름 경로  (0) 2009.06.20
기본 강좌 43 - 선행 제약 조건  (0) 2009.06.20
기본 강좌 42 - 검사점  (0) 2009.06.20
기본 강좌 41 - 구성  (0) 2009.06.20
기본 강좌 40 - 식  (0) 2009.06.20
반응형

검사점

 

지금까지의 여러 SSIS 기능들에 대한 강좌에서 자주 우수한 기능, “획기적인 기능이라는 표현을 써서 조금 식상할 것도 같지만, 이번 강좌에서 다루는 검사점(Checkpoint) 기능 또한 매우 유용하고 우수한 기능이라 생각됩니다.

 

검사점 기능에 대해 알아보기 전에 잠시 SQL 2000 DTS 패키지를 운영할 때의 경험을 언급하겠습니다.

 

필자가 관리했었던 패키지는 매일 수십 개의 작업이 수행되는 어느 정도 규모가 큰 환경이었습니다. 패키지 또한 단순한 Bulk Insert의 형태가 아닌 복잡한 방식으로 데이터 처리를 수행하는 것들도 많이 존재했습니다. 매일 아침에 출근하여 가장 먼저 하는 작업은 새벽에 수행되는 패키지들이 정상적으로 수행되었는지, 문제가 없는지 등을 확인하는 것이었는데, 관리하는 패키지의 수가 많기 때문에 자주 처리 에러가 발생되었습니다. 어떤 경우에는 운영 DB에서 문제가 발생되어서 처리가 안되거나 데이터 유형이 다른 값이 발생되어 처리가 실패되는 경우도 있었으며, 디스크 공간 부족으로 인한 저장 실패 등 매우 다양한 형태의 에러가 발생되었습니다. 이러한 에러가 발생될 때, 원인을 해결한 후 다시 패키지를 수행하게 되는데, 이 때 다음과 같은 방식으로 처리하였습니다.

 

1.        패키지에서 에러가 난 부분을 정확히 안다면, 패키지를 연 후, 패키지의 앞 부분을 삭제 또는 비활성화 한 후, 수행되지 않은 부분부터 다시 실행 시킵니다.

2.        해당 패키지가 반복해서 계속 수행되는 것이라면, 이미 패키지의 앞 부분이 여러 번 수행되었을 수 있습니다. 에러가 난 작업의 앞 부분에 대해 중복 적재 여부를 확인한 후, 중복 데이터를 삭제하고 다시 처리합니다.

3.        일 배치 작업과 같이 수행 시간이 짧은 경우는 다시 돌릴 수 있지만, 월 배치 또는 년 배치 작업과 같이 수행 시간이 매우 길거나 개별 작업들의 수행 시간이 긴 경우라도 반복 수행하는데 많은 어려움이 있습니다.

4.        패키지가 복잡한 경우, 정확하게 에러가 난 위치를 파악하기 힘듭니다.

 

이와 같은 상황은 필자뿐만 아니라 배치 프로세스를 관리하는 담당자는 자주 접할 수 있는 경우입니다.

 

SQL 2005 SSIS검사점(Checkpoint) 기능을 이용한다면 위와 같은 사항을 아주 쉽게 해결할 수 있습니다.

 

1.        패키지에 검사점을 설정해 놓으면, 작업 수행 중 에러가 발생되었을 때 에러가 발생한 작업에 대한 정보와 정상적으로 처리된 작업의 정보가 별도의 파일에 기록됩니다.

2.        검사점 파일이 존재하는 경우에는 패키지가 다시 수행되더라도 이미 수행한 작업들에 대해서는 다시 수행하지 않으며, 에러가 발생한 작업부터 수행을 시작합니다.

3.        패키지의 모든 작업들이 에러 없이 정상적으로 수행되는 경우에는 검사점 파일이 생성되지 않습니다. 따라서, 관리자는 작업이 실패가 발생되었는지를 확인하기 위한 방법으로 검사점 파일의 생성 여부만 확인하면 됩니다.

 

검사점제어 흐름 영역에서 패키지에 대해 설정합니다. 다시 시작하는 최소의 작업 단위는 개별 작업(작업 호스트) 단위입니다. 트랜잭션이 설정된 컨테이너인 경우, 해당 컨테이너가 최소 작업 개체가 될 수 있습니다.

 

검사점은 패키지의 제어 흐름 영역의 속성에서 설정할 수 있습니다.

 

 

Ÿ           CheckpointFileName검사점 파일을 지정합니다.

Ÿ           CheckpointUsage검사점 사용 여부를 설정합니다.

ú           Never – 검사점을 사용하지 않습니다. 기본값이며, 검사점을 사용하기 위해서는 이 값 대신 Always 또는 IfExists로 변경해야 합니다.

ú           Always – 검사점 파일을 항상 사용합니다. 에러가 발생하지 않더라도 검사점 파일이 있어야 합니다.

ú           IfExists – 검사점 파일이 있는 경우, 해당 파일을 사용합니다.

Ÿ           SaveCheckpoints오류 발생시 검사점 파일에 오류 정보를 저장할 지를 설정합니다. 검사점 기능을 사용하기 위해서는 이 옵션을 True로 설정해야 합니다.

 

이 외에도 검사점 기능을 구현하기 위해서는 제어 흐름에 있는 각 작업의 FailPackageOnFailure 속성이 True로 설정되어야 합니다.

 

 

패키지 내에 작업이 많은 경우, 각 작업들을 모두 선택한 후에 속성 창에서 해당 속성값을 변경하면 일괄적으로 변경됩니다.

 

 

[참고] 검사점을 사용하기 위한 속성

 

검사점 기능을 사용하기 위해서는 기본적으로

1.       CheckpointFileName에 검사점 파일을 지정

2.       CheckpointUsage의 값을 IfExists로 설정

3.       SaveCheckpoints의 값을 True로 설정

4.       각 작업의 FailPackageOnFailure의 값을 True로 설정

하면 됩니다.

이 때, CheckpointUsageAlways는 테스트 환경 외에서는 적용하지 않도록 합니다. 왜냐하면, SaveCheckpoints의 속성값이 True인 상태에서 패키지가 에러 없이 수행되면 자동으로 검사점 파일은 삭제가 됩니다. 하지만, 이 경우 검사점 파일이 존재하지 않는 상태에서 CheckpointUsageAlways로 설정되어 있다면 패키지는 검사점 파일이 존재하지 않기 때문에 수행을 하지 않게 됩니다. 따라서 위에서와 같이 IfExists로 설정하셔서 사용하시기 바랍니다.

 

 
반응형

'연구개발 > DTS & SSIS' 카테고리의 다른 글

기본 강좌 43 - 선행 제약 조건  (0) 2009.06.20
따라하기 - 검사점 사용하기  (0) 2009.06.20
기본 강좌 41 - 구성  (0) 2009.06.20
기본 강좌 40 - 식  (0) 2009.06.20
기본 강좌 39 - 변수  (0) 2009.06.20
반응형

구성

 

 

SQL 2005 SSIS에서는 패키지의 속성값을 설정할 수 있는 구성(Configurations)이라는 기능을 제공합니다. 패키지에 포함되어 있는 컨테이너나 작업, 연결, 변환 등에 대한 속성뿐만 아니라 패키지의 격리 수준이나 검사점 파일명 등과 같은 패키지 수준의 전반적인 속성에 대해서도 값을 설정할 수 있습니다.

 

구성 기능은 SQL 2000 DTS에서의 동적 속성 작업과 상당히 유사하지만, 부모 패키지 변수 설정이나 SQL Server의 테이블에서의 정보 설정, XML 형태의 정보 파일 저장 등과 같이 기능들이 추가되었으며, 패키지 구성 마법사를 통해 쉽게 설정할 수 있도록 향상되었습니다.

 

동일한 패키지 작업을 여러 서버에서 수행해야 하거나 개발되는 다수의 패키지에서 사용하는 연결 속성 등을 일괄 관리하고자 할 때 구성을 이용할 수 있습니다. 또한, 부모 패키지에서 자식 패키지로 값을 지정해 주는 기능 등을 구현할 때에도 구성을 이용하여 설정할 수 있으며, 시스템 레지스트리의 항목을 읽어오거나 시스템 변수의 값을 사용해야 될 때에도 활용할 수 있습니다.

 

구성에서 설정된 값들은 패키지가 실제 실행이 되는 시점(런타임)에 적용 됩니다. 그리고, 구성이 설정되었더라도 해당 구성 파일 또는 테이블 정보가 없는 경우에도 패키지는 정상적으로 수행됩니다. 예를 들어 D:\package.config 라는 이름의 XML 형태의 구성 파일을 지정하였다 하더라도, 해당 파일이 없는 경우에도 패키지는 에러 없이 정상적으로 수행됩니다.

 

 

 

패키지 개발 화면의 상단에 있는 SSIS(S) à 패키지 구성(C)을 선택하여 구성 마법사를 수행할 수 있습니다.

 

구성 설정은 패키지 구성 마법사를 통해서 수행되며, 다음과 같은 유형으로 지정할 수 있습니다.

 

 

Ÿ           XML 구성 파일
XML
파일 형태로 구성의 설정 값이 저장됩니다. 하나의 XML 구성 파일에는 여러 개의 설정 값이 저장될 수 있습니다.
XML
구성 파일은 크게 두 개의 부분으로 나눠집니다. 상단의 제목 부분은 구성 파일 자체에 대한 정보를 포함하는 부분이며, 파일을 만든 시간, 패키지 명, 패키지 ID 등과 같은 값 등이 저장됩니다. 하단의 내용은 구성으로 저장된 속성과 속성 값이 저장되는 부분입니다.



Ÿ           환경 변수
시스템의 환경 변수에 구성에서 사용할 값을 저장해서 사용할 수 있습니다. 또한, SSIS 패키지에서 시스템 환경 변수의 값을 참조해야 할 때에도 이용 가능합니다.


위의 그림에서와 같이 시스템의 환경 변수 설정 부분에서 변수를 추가한 후, 이를 SSIS의 패키지에서 사용하도록 지정할 수 있으며, 시스템에서 설정된 환경 변수들을 패키지의 작업 폴더의 경로나 다른 속성의 값으로 이용하도록 기본적으로 제공되는 환경 변수를 지정할 수 있습니다.



Ÿ           레지스트리 항목
구성에서 사용할 항목의 값을 시스템의 레지스트리에 저장한 후 이를 사용할 수 있습니다. 또한 환경 변수와 마찬가지로 시스템에 저장되어 있는 레지스트리 항목을 SSIS 패키지에서 사용할 수 있습니다.


예를 들어, 위의 그림에서와 같이 시스템 레지스트리에서 임의의 키 항목인 SSISPackages에 저장되어 있는 값을 구성에서 읽어오도록 지정합니다. 이 때, 읽어오거나 지정할 수 있는 레지스트리는 HKEY_CURRENT_USER 하위에 있는 키 값이어야 합니다.



Ÿ           부모 패키지 변수
부모 패키지에서 자식 패키지를 호출할 때, 자식 패키지에 있는 변수의 값 또는 개체의 속성 값을 지정할 수 있습니다. 자식 패키지에서는 부모 패키지의 변수 이름만 지정해 주면, 이렇게 설정된 자식 패키지를 부모 패키지에서 호출할 때 별 다른 설정 없이도 부모 패키지의 해당 변수의 값이 자식 패키지로 전달됩니다.

 

Ÿ           SQL Server
SQL Server
에 테이블 형태로 구성 정보를 저장하여 이용할 수 있습니다. 구성 정보를 저장하는 테이블은 다음과 같은 형태 입니다.

CREATE TABLE [dbo].[SSIS Configurations]

(

             ConfigurationFilter NVARCHAR(255) NOT NULL,

             ConfiguredValue NVARCHAR(255) NULL,

             PackagePath NVARCHAR(255) NOT NULL,

             ConfiguredValueType NVARCHAR(20) NOT NULL

)


 
구성 테이블이 저장되어 있는 DB에 대한 연결을 지정하고, 구성 테이블(A)에서 구성 테이블 명을 선택합니다.
구성 필터(F)는 구성 테이블 중, 현재 사용할 속성의 ConfigurationFilter 열 값 입니다.



 

 

구성을 저장하는 유형 중, XML 구성 파일SQL Server 유형의 경우, 다음과 같은 특징이 있습니다.

Ÿ           XML 구성 파일이 없거나 구성 파일 정보를 저장하는 테이블에 해당 항목의 값이 없는 경우, 최초 실행인 경우에는 자동으로 생성합니다. 이 때 구성 파일 또는 테이블에 저장되는 값은 현재 패키지에 해당하는 항목의 값입니다.

Ÿ           하지만, 이미 구성 파일이 생성된 상태 또는 구성 정보가 테이블에 추가된 상태에서 해당 정보를 삭제할 경우, 구성 정보가 제대로 작동하지 않습니다. 구성 설정 메뉴에서는 해당 구성이 설정되어 있는 것으로 표시되지만, 더 이상 구성 기능이 수행되지 않으며 수정도 되지 않습니다. 이 경우, 수동으로 구성 정보를 만들어 주거나 구성 설정을 제거한 후 다시 설정해야 합니다.

 

 

반응형

'연구개발 > DTS & SSIS' 카테고리의 다른 글

따라하기 - 검사점 사용하기  (0) 2009.06.20
기본 강좌 42 - 검사점  (0) 2009.06.20
기본 강좌 40 - 식  (0) 2009.06.20
기본 강좌 39 - 변수  (0) 2009.06.20
따라하기 - 스크립트 구성 요소 - 대상  (0) 2009.06.20
반응형

 

(Expressions) 기능은 SSIS를 보다 동적으로 운영할 수 있도록 하는 기능입니다.

 

예를 들어 다음과 같은 프로세스 실행 작업을 생각해 봅시다.

 

 

 

zip.exe라는 압축을 수행하는 프로그램을 실행하며 매개 변수인 Arguments에는 상황에 따라 값이 변경되어야 하는 경우가 있을 수 있습니다. 20060915_Data.txt 와 같이 수행 날짜의 값을 이용한 파일명을 설정해야 하는 경우를 고려해 봅시다. 프로세스 실행 작업 편집기에서는 정적인(Statistics) 형태의 속성 값만 지정 가능하기 때문에 원하는 형태로 지정할 수 없습니다.

이를 구현할 수 있는 방법으로는 프로세스 실행 작업에 포함된 StandardInputVariable을 이용하는 방식입니다. String형 변수를 하나 추가한 후, 프로세스 실행 작업 전에 스크립트 작업 또는 ActiveX 스크립트 작업 등을 이용하여 이 변수에 해당 파일명 ( : @fileNameStr = “20060915_Data.txt”)을 지정하는 작업을 추가합니다. 그런 다음, StandardInputVariable 속성에 이 변수를 지정하는 방식입니다.

위의 경우, 입력 매개 변수를 대체해 주는 역할을 하는 StandardInputVariable 이라는 기능을 이용하여 해결할 수 있었지만, 만약 실행하는 프로그램 명(Executable)도 변경을 해야 하는 경우도 있을 수 있습니다. SQL 2000 DTS에서는 이러한 설정들을 수행하기 위해 동적 속성 작업을 이용하거나 ActiveX 스크립트 작업을 이용하여 해당 작업의 속성을 변경하도록 하였습니다. 물론 SQL 2005 SSIS에도 동적 속성을 대체하는 구성(Configuration)을 이용할 수도 있지만, DTS에서와는 용도가 약간 다릅니다.

 

SQL 2005 SSIS에서는 기본적으로 모든 작업 개체 및 작업 영역에서 해당 개체의 속성을 쉽게 설정할 수 있는 식(Expressions) 기능이 제공됩니다. 위의 예를 이용하여 계속 설명하겠습니다. 위의 그림에서 식 탭으로 이동한 후, Expressions 오른쪽에 있는 ... 버튼을 누르면 속성 식 편집기가 나타납니다.

 

 

이 편집기에서 해당 개체의 다양한 속성들을 정의할 수 있습니다.

속성에서 Arguments를 선택한 후, 오른쪽의 식 부분 옆에 있는 ... 버튼을 눌러 식 작성기를 띄운 후, 다음과 같은 형식으로 식을 작성하면 패키지가 실행 될 때 Arguments 속성 부분에 해당 날짜의 파일명이 지정됩니다.

 

 

이와 같은 방식으로 식을 작성하여 사용할 수 있으며, 하나의 작업 또는 개체, 컨테이너에 대해 여러 개의 식을 정의할 수도 있습니다.

식에서 정의할 수 있는 속성은 일부 공통 항목 외에는 각 개체마다 다릅니다. 위의 예에서와 같이 Arguments 속성은 프로세스 실행 작업에서만 나타나는 속성 항목이며, Name, TransactionOption 등과 같은 속성은 모든 작업에서 나타나는 속성 항목입니다.

 

식 작성기에서 식을 작성할 때에는 시스템 변수사용자 변수를 사용할 수도 있으며, 수치 연산 함수, 문자열 함수, 날짜/시간 함수, NULL  함수, 유형 변환, 연산자 등을 이용하여 작성할 수 있습니다.

 

 

?   수치 연산 함수

함수

설명

ABS

숫자 식의 절대값을 양수로 반환합니다.

EXP

밑이 e 지정한 식의 지수를 반환합니다.

CEILING

숫자 식보다 크거나 같은 최소 정수를 반환합니다.

FLOOR

숫자 식보다 작거나 같은 최대 정수를 반환합니다.

LN

숫자 식의 자연 로그를 반환합니다.

LOG

숫자 식의 상용 로그를 반환합니다.

POWER

숫자 식의 거듭제곱을 반환합니다.

ROUND

특정 길이나 전체 자릿수로 반올림한 숫자 식을 반환합니다.

SIGN

숫자 식의 양수(+), 음수(-) 또는 (0) 부호를 반환합니다.

SQUARE

숫자 식의 제곱을 반환합니다.

SQRT

숫자 식의 제곱근을 반환합니다.

 

?   문자열 함수

함수

설명

CODEPOINT

문자 식에서 가장 왼쪽 문자의 유니코드 코드 값을 반환합니다.

FINDSTRING

식에서 지정한 문자열 항목의 인덱스(1부터 시작) 반환합니다.

HEX

정수의 16진수 값을 나타내는 문자열을 반환합니다.

LEN

문자 식에 포함된 문자의 수를 반환합니다.

LOWER

대문자를 소문자로 변환한 후에 문자 식을 반환합니다.

LTRIM

선행 공백을 제거하고 문자 식을 반환합니다.

REPLACE

내의 문자열을 다른 문자열이나 문자열로 바꾼 문자 식을 반환합니다.

REPLICATE

지정한 횟수만큼 복제된 문자 식을 반환합니다.

REVERSE

문자 식을 순서로 반환합니다.

RIGHT

오른쪽의 지정한 문자 수에서 시작하여 문자열의 일부를 반환합니다.

RTRIM

후행 공백을 제거하고 문자 식을 반환합니다.

SUBSTRING

문자 식의 일부를 반환합니다.

TRIM

선행 후행 공백을 제거하고 문자 식을 반환합니다.

UPPER

소문자를 대문자로 변환한 후에 문자 식을 반환합니다.

 

?   날짜/시간 함수

함수

설명

DATEADD

지정한 날짜에 날짜 또는 시간 간격을 더하여 새로운 DT_DBTIMESTAMP 값을 반환합니다.

DATEDIFF

지정한 날짜 간에 교차되는 날짜와 시간 경계값을 반환합니다.

DATEPART

날짜의 특정 부분을 나타내는 정수를 반환합니다.

DAY

지정한 날짜의 일을 나타내는 정수를 반환합니다.

GETDATE

시스템의 현재 날짜를 반환합니다.

GETUTCDATE

시스템의 현재 날짜를 UTC 시간(국제 표준시 또는 그리니치 표준시)으로 반환합니다.

MONTH

지정한 날짜의 월을 나타내는 정수를 반환합니다.

YEAR

지정한 날짜의 연도를 나타내는 정수를 반환합니다.

 

?   NULL 함수

함수

설명

ISNULL

식이 Null인지 여부에 따라 부울 결과를 반환합니다.

NULL

요청한 데이터 형식의 Null 값을 반환합니다.

 

반응형
반응형

변수

 

SSIS에는 크게 두 가지 유형의 변수가 있습니다. 하나는 시스템 변수이며, 다른 하나는 사용자 변수입니다. 이러한 구분은 변수 정의 시 네임 스페이스로 구분이 됩니다.

 

시스템 변수는 패키지 생성 일자, 패키지 GUID, Version GUID, Machine Name 등 패키지 수행 환경에 대한 정보가 저장되는 변수로써, 사용자가 해당 값을 변경할 수는 없습니다.

 

 

 

사용자 변수는 패키지 내에서 작업을 수행할 때 사용되는 변수로 사용자가 필요에 따라 추가하며, 값을 변경할 수 있습니다.

 

 

SQL 2000 DTS에서의 변수와 가장 큰 차이점은 사용자 변수 정의 시 범위가 설정되는 것입니다.

 

DTS에서 하나의 패키지에서는 범위의 개념이 없이 모든 동일한 수준에서 처리가 되었습니다. 하지만, SSIS에서는 컨테이너라는 개체를 기준으로 범위가 정해집니다. 작업 개체 역시 하나의 작업 호스트 컨테이너이기 때문에, 변수의 범위로 정의될 수 있습니다.

 

 

 

위의 그림에서, [변수1]은 변수예제.dtsx라는 전체 범위에서 정의된 변수입니다. 따라서 [변수1]은 패키지의 어떠한 영역에서도 이용 가능합니다.

[변수2]는 하위 컨테이너인 시퀀스 컨테이너(B)의 범위에서 정의된 변수로써, 시퀀스 컨테이너(B) 내에 포함된 SQL 실행 작업(B’)이나 데이터 흐름 작업(C) 등과 같은 하위 작업에서는 사용 가능하지만, SQL 실행 작업(A’)에서는 사용할 수 없습니다.

[변수3]데이터 흐름 작업(C)의 범위에서 정의된 변수이기 때문에, 데이터 흐름 작업(C) 외에는 사용할 수 없습니다.

 

변수가 사용할 범위의 설정은 변수 정의 시에 할 수 있는 사항은 아니며, 현재 선택되어 있는 수준이 자동으로 범위가 됩니다. , 데이터 흐름 작업(C) 내의 여러 변환에서 변수를 정의할 경우, 자동으로 해당 변수의 범위는 현재 작업 중인 컨테이너인 데이터 흐름 작업(C)가 됩니다.

만약 데이터 흐름 작업(C) 에서 상위 범위의 변수를 정의하기 위해서는 해당 수준의 컨테이너로 나온 후, 변수를 정의해야 합니다.

 

변수 창의 회색 X 버튼을 누르면 시스템 변수 리스트가 나타나며, 파란색 X 버튼을 누르면 현재 패키지에서 정의된 모든 사용자 변수가 나타납니다. 이 버튼이 눌러지지 않은 상태에서는 현재 컨테이너에서 사용 가능한 변수의 리스트만 나타납니다.

 

제어 흐름 영역데이터 흐름 영역, 이벤트 처리기 작업 영역에서 사용 가능한 시스템 변수는 약간씩 차이가 있습니다. 다음 표를 시스템 변수 리스트를 참고하시기 바랍니다.

 

 

?   패키지 수준의 시스템 변수

시스템 변수

데이터 형식

설명

CancelEvent

Int32

0 아닌 값으로 설정되는 경우 작업 실행이 중지됨을 나타내는 이벤트 핸들입니다.

CreationDate

DateTime

패키지를 만든 날짜입니다.

CreatorComputerName

String

패키지를 만든 컴퓨터입니다.

CreatorName

String

패키지를 만든 사용자의 이름입니다.

ExecutionInstanceGUID

String

실행 중인 패키지의 고유 식별자입니다.

InteractiveMode

Boolean

패키지가 대화형 모드에서 실행 중인지 여부를 나타냅니다. SSIS 디자이너에서 패키지를 실행 중인 경우 속성은 True 설정됩니다. DTExec 명령 프롬프트 유틸리티를 사용하여 패키지를 실행 중인 경우 속성은 False 설정됩니다.

LocaleId

Int32

패키지에서 사용되는 로캘입니다.

MachineName

String

패키지가 실행 중인 컴퓨터 이름입니다.

OfflineMode

Boolean

패키지가 오프라인 모드인지 여부를 나타냅니다. 오프라인 모드에서는 데이터 원본에 연결하지 않습니다.

PackageID

String

패키지의 고유 식별자입니다.

PackageName

String

패키지의 이름입니다.

StartTime

DateTime

패키지 실행을 시작한 시간입니다.

UserName

String

패키지를 시작한 사용자의 계정입니다. 사용자 이름은 도메인 이름에 의해 한정됩니다.

VersionBuild

Int32

패키지 버전입니다.

VersionComment

String

패키지 버전에 대한 설명입니다.

VersionGUID

String

버전의 고유 식별자입니다.

VersionMajor

Int32

패키지의 버전입니다.

VersionMinor

Int32

패키지의 버전입니다.

 

 

?   컨테이너의 시스템 변수

시스템 변수

데이터 형식

설명

LocaleId

Int32

컨테이너에서 사용되는 로캘입니다.

 

 

?   작업 수준의 시스템 변수

시스템 변수

데이터 형식

설명

CreationName

String

작업 이름입니다.

LocaleId

Int32

작업에서 사용되는 로캘입니다.

TaskID

String

작업의 고유 식별자입니다.

TaskName

String

작업의 이름입니다.

TaskTransactionOption

Int32

작업에서 사용되는 트랜잭션 옵션입니다.

 

 

?   이벤트 처리기의 시스템 변수

시스템 변수

데이터 형식

설명

이벤트 처리기

Cancel

Boolean

오류, 경고 또는 쿼리 취소가 발생할 이벤트 처리기 실행이 중지되는지 여부를 나타냅니다.

OnError

OnWarning

OnQueryCancel

ErrorCode

Int32

오류 식별자입니다.

OnError

OnInformation

OnWarning

ErrorDescription

String

오류에 대한 설명입니다.

OnError

OnInformation

OnWarning

ExecutionStatus

Boolean

현재 실행 상태입니다.

OnExecStatusChanged

ExecutionValue

DBNull

실행 값입니다.

OnTaskFailed

LocaleId

Int32

이벤트 처리기에서 사용되는 로캘입니다.

All

PercentComplete

Int32

완료된 작업의 백분율입니다.

OnProgress

ProgressCountHigh

Int32

OnProgress 이벤트에 의해 처리된 전체 작업 개수를 나타내는 64비트 값의 상위 부분입니다.

OnProgress

ProgressCountLow

Int32

OnProgress 이벤트에 의해 처리된 전체 작업 개수를 나타내는 64비트 값의 하위 부분입니다.

OnProgress

ProgressDescription

String

진행률에 대한 설명입니다.

OnProgress

Propagate

Boolean

이벤트가 상위 수준의 이벤트 처리기로 전달되는지 여부를 나타냅니다.

All

SourceDescription

String

이벤트 처리기에서 이벤트를 발생시킨 실행 개체에 대한 설명입니다.

All

SourceID

String

이벤트 처리기에서 이벤트를 발생시킨 실행 개체의 고유 식별자입니다.

All

SourceName

String

이벤트 처리기에서 이벤트를 발생시킨 실행 개체의 이름입니다.

All

VariableDescription

String

변수 설명입니다.

OnVariableValueChanged

VariableID

String

변수의 고유 식별자입니다.

OnVariableValueChanged

 

 

반응형
반응형


따라하기  – 스크립트 구성 요소를 데이터 대상으로 이용하기

 

따라하기 2의 작업에서 레코드 집합 대상 대신 스크립트 구성 요소를 이용한 대상을 만드는 예제를 구현하겠습니다. 스크립트를 이용한 대상에서는 입력되는 데이터의 ProductName 데이터 중 길이가 가장 긴 데이터와 Quantity 열의 합계를 SSIS의 변수에 저장한 후, 메시지 박스로 출력하는 예제입니다.

 

     따라하기 2 8단계 까지는 동일합니다.

 

9.       왼쪽의 도구 상자에서 스크립트 구성 요소를 하나 더 추가한 후, 유형대상으로 선택하고 이름을 스크립트 대상으로 변경합니다. 이 후, 변환 작업을 수행하는 스크립트 구성 요소의 녹색 선과 연결합니다.

 

10.   패키지 수준의 변수를 추가해야 합니다. 작업 영역에서 제어 흐름을 선택한 후, 빈 공간을 눌러 나오는 메뉴에서 변수(S)를 선택하여 변수 창을 띄웁니다.



 

11.   변수 창에서 maxProductName이라는 String형 변수와 sumQty라는 Int32형 변수를 추가합니다.



 

12.   데이터 흐름 영역에서 스크립트 대상을 더블 클릭한 후, 입력 열 탭에서 ProductName 열과 Quantity 열을 선택합니다.



13.   스크립트 탭에서 ReadWriteVariables 속성에 maxProductName, sumQty 변수명을 입력한 후, 스크립트 디자인(S)을 클릭하여 VSA를 띄웁니다.



 

14.   스크립트 탭에서 ReadWriteVariables 속성에 maxProductName, sumQty 변수명을 입력한 후, 스크립트 디자인(S)을 클릭하여 VSA를 띄웁니다.

 

' Microsoft SQL Server Integration Services user script component

' This is your new script component in Microsoft Visual Basic .NET

' ScriptMain is the entrypoint class for script components

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

 

Public Class ScriptMain

    Inherits UserComponent

 

    Dim tmpStr As String

    Dim sumQty As Integer

 

 

    Public Overrides Sub PreExecute()

 

        tmpStr = ""

        sumQty = 0

 

    End Sub

 

    Public Overrides Sub 입력_ProcessInputRow(ByVal Row As 입력Buffer)

 

        If Row.ProductName.Length > tmpStr.Length Then

            tmpStr = Row.ProductName.ToString

        End If

 

        sumQty = sumQty + Row.Quantity

 

    End Sub

 

    Public Overrides Sub PostExecute()

 

        Variables.maxProductName = tmpStr

        Variables.sumQty = sumQty

 

    End Sub

 

End Class

 

 

 

15.   이제 최종 결과가 maxProductName, sumQty 변수에 저장됩니다. 이 저장된 값을 확인하기 위해, 제어 흐름 영역에서 스크립트 작업을 추가한 후, 데이터 흐름 작업의 녹색 선과 연결합니다.
(참고 : 본 예제에서는 데이터 흐름 작업의 이름을 데이터 변환으로 미리 변경 해 놓았습니다.)



16.   스크립트 작업을 더블 클릭한 후, 스크립트 탭의 ReadOnlyVariables 속성에 maxProductName, sumQty로 변수명을 기입합니다.



17.   스크립트 디자인(S)를 클릭하여 VSA를 띄운 후, 다음 스크립트를 입력합니다.

' Microsoft SQL Server Integration Services Script Task

' Write scripts using Microsoft Visual Basic

' The ScriptMain class is the entry point of the Script Task.

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

 

Public Class ScriptMain

 

             ' The execution engine calls this method when the task executes.

             ' To access the object model, use the Dts object. Connections, variables, events,

             ' and logging features are available as static members of the Dts class.

             ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

             '

             ' To open Code and Text Editor Help, press F1.

             ' To open Object Browser, press Ctrl+Alt+J.

 

             Public Sub Main()

                           '

                           ' Add your code here

        '

        MsgBox("Max Length ProductName : " & Dts.Variables("maxProductName").Value.ToString, MsgBoxStyle.Information)

 

        MsgBox("Sum Quantity : " & Dts.Variables("sumQty").Value.ToString, MsgBoxStyle.Information)

 

 

                           Dts.TaskResult = Dts.Results.Success

             End Sub

 

End Class

 

 

18.   패키지를 실행하여 수행되는 결과를 확인합니다.



 

반응형
반응형


따라하기  – 스크립트 구성 요소를 데이터 변환으로 이용하기

 

SQL 쿼리를 이용한 입력 데이터에 대리키(Surrogate Key) 형태의 순번 열과 누적 수량(Quantity)을 추가하는 작업을 구현하겠습니다.

 

1.       빈 패키지 파일을 하나 추가한 후, 데이터 흐름 작업을 추가합니다.

 

2.       아래 부분에 있는 연결 관리자에서 AdventureWorks를 지정하는 OLE DB 연결을 생성합니다. 이 연결은 스크립트 구성 요소를 이용한 변환 작업을 수행하기 위한 OLE DB 원본에서 이용할 것입니다.

 

3.       데이터 흐름 영역OLE DB 원본을 추가한 후, 2에서 추가한 연결을 지정하고 데이터 액세스 모드테이블 또는 뷰 에서 SQL 명령으로 변경합니다. 그런 다음 SQL 명령 텍스트에 다음과 같은 쿼리를 입력합니다.

 

SELECT A.TransactionID, A.ProductID, B.Name AS ProductName, Quantity

FROM Production.TransactionHistory A JOIN Production.Product B ON A.ProductID = B.ProductID

             

             

 

4.       도구 상자에서 스크립트 구성 요소를 추가한 후, 유형을 변환으로 선택하고 OLE DB 원본의 녹색 선을 연결합니다.



5.       스크립트 구성 요소를 더블 클릭하여 스크립트 변환 편집기를 연 후, 입력 열 탭에서 네 개의 열을 모두 체크합니다.



6.       /출력 탭에서 출력 0을 확장한 후, 출력 열을 선택한 상태에서 열 추가(C)를 클릭하여 열을 추가합니다. 열의 이름은 Seq이며, DataType부호 없는 4바이트 정수(DT_I4)로 설정합니다. 동일한 방법으로 열을 하나 더 추가한 후, 열 이름을 AccumQuantity로 설정하고 DataType도 동일하게 DT_I4로 설정합니다.



7.       왼쪽의 스크립트 탭을 클릭한 후, 스크립트 디자인(S) 버튼을 클릭하여 스크립트를 작성할 VSA(Visual Studio for Applications)를 띄운 후, 다음 스크립트를 입력합니다.

' Microsoft SQL Server Integration Services user script component

' This is your new script component in Microsoft Visual Basic .NET

' ScriptMain is the entrypoint class for script components

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

 

Public Class ScriptMain

    Inherits UserComponent

 

    Dim seq As Integer

    Dim AccumQty As Integer

 

 

    Public Sub New()

        seq = 0

        AccumQty = 0

 

    End Sub

 

    Public Overrides Sub 입력0_ProcessInputRow(ByVal Row As 입력Buffer)

        '

        ' Add your code here

        '

        seq += 1

 

        Row.Seq = seq

        AccumQty = AccumQty + Row.Quantity

 

        Row.AccumQuantity = AccumQty

 

    End Sub

 

End Class

 

8.       VSA를 닫은 후, 확인을 눌러 스크립트 변환 편집기를 닫습니다.

 

9.       데이터 흐름 영역의 빈 곳에서 마우스 오른쪽 클릭을 하여 나타나는 메뉴 중 변수(S)를 선택하여 변수 창을 띄운 후, tempResult라는 이름의 Object 형 변수를 하나 추가합니다

 

10.   도구 상자에서 레코드 집합 대상을 추가한 후, 스크립트 구성 요소의 녹색 선과 연결합니다. 레코드 집합 대상을 더블 클릭하여 레코드 집합 대상 편집기를 띄운 후, 구성 요소 속성 탭에서 VariableName 부분에 tempResult를 입력합니다. 입력 열 탭에서 모든 열을 선택합니다.



 

11.   추가되는 데이터를 확인하기 위해 데이터 뷰어를 추가합니다. 스크립트 구성 요소레코드 집합 대상 사이의 데이터 흐름 경로를 더블 클릭한 후, 데이터 뷰어 탭에서 형태의 데이터 뷰어를 추가합니다.

 

12.   패키지를 실행하여 처리되는 데이터를 확인합니다.



 

반응형
반응형


따라하기  – 스크립트 구성 요소를 데이터 원본으로 이용하기

 

스크립트 구성 요소를 데이터 원본으로 이용하는 예제를 구현해 보겠습니다. 간단하게 스크립트 구성요소를 이용하여 아래 그림과 같은 10,000개의 순차적인 열과 난수 데이터를 발생시키도록 하겠습니다.

 

  

 

1.       빈 패키지 파일을 하나 추가한 후, 데이터 흐름 작업을 추가합니다.

2.       데이터 흐름 영역 내에 스크립트 구성 요소를 추가한 후, 원본으로 유형을 설정합니다.

3.       추가한 스크립트 구성 요소를 더블 클릭하여 스크립트 변환 편집기를 연 후, /출력 탭의 중간 부분에 있는 출력 0 부분을 확장한 후, 출력 열을 선택합니다.



4.       아래의 열 추가(C)를 클릭하여 열을 추가합니다. 열의 이름은 Seq 로 설정하며, 해당 열의 데이터 타입이 부호 없는 4바이트 정수(DT_I4)인 것을 확인합니다.



5.       동일한 방법으로 Col1, Col2라는 이름의 열을 추가시키며, 두 열의 DataType 모두 위와 동일한 DT_I4로 설정합니다.
이 때, 다음과 같은 사항을 참고하시기 바랍니다. 만약 4의 그림과 같이, 추가한 열 Seq가 선택된 상태에서 다시 열 추가(C)를 눌러 열을 추가하는 경우, 열은 현재 선택된 Seq 위에 추가가 됩니다. 하지만, 출력 열 이라는 부분을 클릭한 후, 열 추가를 하면 현재의 열 가장 마지막에 추가가 됩니다.



6.       왼쪽의 스크립트 탭을 클릭한 후, 스크립트 디자인(S) 버튼을 클릭하여 스크립트를 작성할 VSA(Visual Studio for Applications)를 띄운 후, 다음 스크립트를 입력합니다.

' Microsoft SQL Server Integration Services user script component

' This is your new script component in Microsoft Visual Basic .NET

' ScriptMain is the entrypoint class for script components

 

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

 

Public Class ScriptMain

    Inherits UserComponent

 

    Public Overrides Sub CreateNewOutputRows()

        '

        ' Add rows by calling AddRow method on member variable called "Buffer"

        ' E.g., MyOutputBuffer.AddRow() if your output was named "My Output"

        '

        Dim i As Integer

        Dim randVal As New Random

 

        For i = 1 To 10000

            With 출력0Buffer

                .AddRow()                                  ' 출력 행을 추가

                .Seq = i

                .Col1 = randVal.Next(1, 9999)  ' 1에서 9999  사이의 난수발생

                .Col2 = randVal.Next(1, 99999) ' 1에서 99999 사이의 난수발생

            End With

        Next

 

    End Sub

 

End Class

 

7.       VSA를 닫은 후, 확인을 눌러 스크립트 변환 편집기를 닫습니다.

 

8.       데이터 흐름 영역의 빈 곳에서 마우스 오른쪽 클릭을 하여 나타나는 메뉴 중 변수(S)를 선택하여 변수 창을 띄운 후, tempResult라는 이름의 Object 형 변수를 하나 추가합니다. 이는 임시 데이터 대상으로 쓰일 레코드 집합 대상에서 이용할 임시 변수입니다.



9.       도구 상자에서 레코드 집합 대상을 추가한 후, 스크립트 구성 요소의 녹색 선과 연결합니다. 레코드 집합 대상을 더블 클릭하여 레코드 집합 대상 편집기를 띄운 후, 구성 요소 속성 탭에서 VariableName 부분에 tempResult를 입력합니다. 입력 열 탭에서는 세 개의 열을 모두 선택합니다.



10.   데이터가 처리되는 과정을 확인하기 위해 중간 경로에 데이터 뷰어를 추가합니다. 스크립트 구성 요소레코드 집합 대상 간의 녹색 경로를 더블 클릭한 후 나타나는 데이터 흐름 경로 편집기데이터 뷰어 탭에서 추가(A)를 누른 후 표 형태의 뷰어를 추가합니다.



11.   패키지를 실행하여 생성되는 원본 데이터를 확인합니다.



 

 

반응형
반응형

스크립트 구성 요소

 

스크립트 구성 요소는 매우 다양한 기능을 수행할 수 있는 개체입니다. 스크립트를 이용한 작업은 제어 흐름 영역에서 스크립트 작업도 있지만, 스크립트 구성 요소는 데이터 흐름에서 주로 사용되는 개체입니다.

SQL 2000 DTS에서의 ActiveX 스크립트 작업SQL 2005 SSIS스크립트 작업이라면, DTSData Pump 작업 내의 ActiveX 스크립트 작업SSIS스크립트 구성 요소 작업이라 할 수 있습니다.

 

 

 

위의 그림에서 보는 바와 같이 스크립트 구성 요소는 데이터 원본도 될 수 있으며, 입력 데이터를 처리하는 변환도 되며, 변환 작업을 통해 처리된 데이터에 대한 데이터 대상도 될 수 있습니다.

 

스크립트 구성 요소의 기능은 매우 다양한 만큼 추후에 별도의 강좌에서 자세히 다루겠으며 본 글에서는 각 유형별 적용 가능한 영역과 따라하기를 통해 실제로 구현을 하면서 세부 사항에 대해 설명하겠습니다.

 

스크립트 구성 요소데이터 원본으로 사용될 수 있는 경우는 다음과 같습니다.

 

1.       입력 데이터가 단순히 플랫 파일 연결이나 OLE DB 연결 등과 같이 간단하게 설정할 수 없는 경우 예를 들어 테이블에 있는 원본 데이터에 대해 복잡한 쿼리를 통한 수행 결과가 원본 데이터가 될 수 있습니다. 또한 서로 다른 여러 형태의 데이터에 대해 복잡한 처리 작업을 수행한 후 산출되는 결과가 원본이 되는 경우도 있습니다. 이러한 처리 과정을 VB.net 스크립트를 이용하여 구현한 후 최종적으로 처리되는 데이터를 원본 데이터로 설정할 수 있습니다.

 

2.       기본적으로 제공하는 데이터 원본 유형 이외의 형태 – SQL 2005 SSIS에서는 기본적으로 ODBC 연결을 통한 데이터 원본을 지원하지 않습니다. 또한 ADSI(Active Directory Service Interface)를 사용하여 Active Directory에 접속하여 사용자 정보를 읽어 와서 원본 데이터로 이용하는 등 기본적으로 제공되는 데이터 원본 외에도 프로그래밍으로 처리 가능한 다양한 형태의 데이터 형태에 대한 접근이 가능합니다.

 

3.       임의의 테스트 데이터를 발생시키는 경우 개발 환경이나 테스트 환경에서 주로 사용되는 용도로써, 설정한 개수만큼의 원본 데이터를 임의로 생성시킬 수 있습니다.

 

 

스크립트 구성 요소데이터 변환으로 사용될 수 있는 경우는 다음과 같습니다.

 

1.       입력 데이터에 대해 쿼리나 변환 작업으로 수행할 수 없는 복잡한 변환 작업이 필요할 때 예를 들어 ‘56’, ‘32’ 등과 같은 두 자리의 코드 데이터를 이용하여 상태를 판단한 후, 세부적인 상태 정보를 출력하는 작업을 수행할 수 있습니다. 또한 단순히 형 변환 작업이나 자릿수 변환 작업 등도 스크립트 변환을 이용하여 구현 가능합니다.

 

2.       입력 데이터 간의 복잡한 연산을 수행 입력되는 데이터 열을 이용하여 복잡한 산술 연산을 수행할 때 스크립트 변환을 이용할 수 있습니다.

 

3.       입력 데이터에 대해 열을 추가할 때 예를 들어 입력 데이터의 각 행에 Row Number 등과 같은 형태의 번호를 매기는 작업을 수행할 때 이용 가능합니다.

 

4.       입력 데이터를 이용하여 유효성을 판단 입력 데이터의 유효성을 판단한 후, 유효하지 않은 경우에는 처리되지 않도록 건너뛰는 작업을 수행할 수 있습니다. 예를 들어 입력되는 데이터의 값이 NULL인 경우, 해당 행의 데이터를 처리하지 않고 다음 행으로 건너뛰도록 설정합니다.

 

 

스크립트 구성 요소데이터 대상으로 사용될 수 있는 경우는 다음과 같습니다.

 

1.       기본적으로 제공하는 데이터 대상 유형 이외의 형태 –ODBC 연결 대상과 같이 기본적으로 SQL 2005 SSIS에서 제공하지 않는 데이터 대상 유형을 구현할 수 있습니다.

 

2.       처리되는 데이터를 이용하여 다양한 작업을 수행 처리된 데이터를 입력 받은 후, 이를 이용하여 SQL 쿼리 파일을 만들거나 웹 보고서를 생성하는 등 데이터를 이용한 다양한 작업을 수행할 수 있습니다.

 

이 외에도 매우 다양한 작업들을 수행할 수 있습니다

 

반응형
반응형



행 개수

 

행 개수 변환 SSIS의 작업 개체 중 가장 간단하면서도 매우 유용한 개체입니다. 입력 데이터를 직접 변경하지 않기 때문에 정확히는 변환 작업이라고는 할 수 없는 개체입니다. 이 개체가 수행하는 역할은 데이터 흐름 경로 상에서 처리되는 행의 최종 개수를 사용자가 정한 변수에 저장하는 역할을 수행합니다. 입력되는 데이터에 대해 아무런 변환을 수행하지 않기 때문에 입력 데이터와 출력 데이터가 동일합니다.

 

일반적으로 데이터 변환 작업 후에 정상적으로 데이터가 처리되었는지를 확인하는 절차가 필요합니다.

예를 들어 입력 데이터가 100,000개였는데, 조인 또는 변환 등 1:1로 처리되는 작업을 수행한 후 정확히 변환 결과도 동일하게 100,000개 인지를 확인하는 경우도 있습니다. 만약 처리된 결과값의 수가 입력 데이터의 개수와 다른 경우, 매핑 오류로 누락되거나 또는 이중 매핑으로 데이터가 중복이 발생할 수 있습니다.

또한 집계 변환이나 조건부 분할 등과 같이 입력되는 데이터에 대해 조건에 맞는 데이터의 수를 따로 관리해야 할 경우가 있습니다.

만약 저장되는 데이터가 테이블 형태라면 단순히

SELECT COUNT(*) FROM <결과 테이블>

과 같은 쿼리를 이용하여 최종 대상 테이블의 개수를 카운트 해서 확인할 수 있습니다. 하지만 결과 테이블이 매우 큰 경우라면 이 작업 역시 부하를 많이 일으킬 수 있는 작업입니다. 만약 데이터의 대상이 텍스트 파일이나 엑셀 파일, ADO 개체 등과 같이 쉽게 카운트를 수행할 수 없는 경우라면 더 복잡한 작업이 될 수 있습니다.

또 다른 간단한 예로, 매일 반복적으로 데이터를 처리하는 배치 작업에서 매일 처리되는 데이터의 개수를 기록해야 할 경우가 있습니다.

이와 같은 경우, 단순히 최종 데이터 대상 전에 행 개수 개체를 설정하여 처리되는 행 수를 쉽게 파악할 수 있습니다.

 

 

 

 

최종 변환 작업과 데이터 흐름 대상 사이에 행 개수 변환을 삽입한 후, 고급 행 개수 편집기의 구성 요소 속성 탭에 있는 VariableName 속성에 행 개수를 저장할 변수 명을 지정합니다. 입력 열 탭에서 나열되는 열은 체크할 필요가 없습니다.

 

일반적으로 데이터 흐름 작업 내에서 행 개수를 변수에 저장한 후, 해당 데이터 흐름 작업 외에서 이용하게 됩니다. 따라서 행 개수를 저장할 변수의 범위는 데이터 흐름 작업 상위의 영역에서 정의되는 변수이어야 합니다.

 

 

 

 

 

반응형
반응형

유사 항목 그룹화

 

유사 항목 조회 변환은 입력 데이터를 참조 테이블과 비교하여 유사하다고 판단되는 항목을 출력하는 변환인 반면, 유사 항목 그룹화 변환은 참조 테이블 없이 입력 데이터를 분석하여 유사성을 가지는 항목으로 그룹화 시키는 작업입니다. 그룹화라는 이름으로 인해 집계 변환의 그룹핑(GROUP BY) 작업과 같은 방식으로 생각할 수 있지만, 입력 데이터를 GROUP BY하는 연산은 아닙니다. 여러 입력 데이터를 서로 유사성이 있는 형태로 분류(Classification)하는 형태의 작업입니다.

 

 

다음과 같은 입력 데이터를 고려해 봅시다.

 

FIELDS OPERATION MGR

FLDS OPS MGR

FIELDS ORS MGR

FIELDS OPERATIONS MANAG

 

유사 항목 조회 변환의 경우, 참조 테이블에 기준이 되는 항목 값인 FIELDS OPERATION MGR 라는 값이 저장되어 있다고 할 때, 각 입력 데이터는 이 기준 값에 대한 유사성을 판단하여 유사성 및 신뢰도 점수와 함께 데이터를 출력하게 됩니다. 하지만, 유사 항목 그룹화 변환 4개의 입력 데이터를 이용하여 서로 유사성을 분석하여 그룹화 작업을 수행합니다. 예를 들어, 유사성 임계값을 0.70으로 설정한 경우 위의 데이터는 3개의 그룹으로 그룹화 됩니다. 아래 표와 같이 변환 내에서 데이터를 그룹핑 연산을 할 때의 유사성 임계값에 따라 분류되는 그룹의 수는 달라집니다.

 

입력 데이터

유사성 임계값 = 0.70

유사성 임계값 = 0.50

유사성 임계값 = 0.25

FIELDS OPERATION MGR

FIELDS OPERATION MGR

FLDS OPS MGR

FIELDS OPERATION MGR

FLDS OPS MGR

FLDS OPS MGR

FLDS OPS MGR

FIELDS OPERATION MGR

FIELDS ORS MGR

FLDS OPS MGR

FIELDS OPERATIONS MANAG

FIELDS OPERATION MGR

FIELDS OPERATIONS MANAG

FIELDS OPERATIONS MANAG

FIELDS OPERATIONS MANAG

FIELDS OPERATION MGR

그룹 수

3

2

1

 

유사 항목 그룹화를 수행할 수 있는 데이터 형태는 DT_WSTR만 가능합니다.

 

[참고] 온라인 도움말에서는 유사 항목 그룹화 변환 DT_STR 형태도 지원한다고 되어 있습니다.

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ko/extran9/html/e43f17bd-9d13-4a8f-9f29-cce44cac1025.htm

하지만, 유사 항목 조회 변환에서만 DT_STR DT_WSTR이 가능하며, 유사 항목 그룹화 변환에서는 DT_STR형을 사용하면 다음과 같은 에러가 출력됩니다. 데이터 변환 작업 등을 이용하여 입력 데이터를 DT_WSTR로 변경해야 정상적으로 수행할 수 있습니다.

 

 

 

 

 

 

연결 관리자 탭

 

 

유사 항목 그룹화 변환 편집기의 연결 관리자 탭에서는 유사 항목 그룹화 작업을 수행할 때 필요한 임시 저장 테이블의 연결을 지정합니다.

이 때 생성되는 임시 테이블은 입력 데이터를 토큰화 하여 저장하는 인덱스 테이블 입니다. 변환 과정에서 자동으로 임시 테이블을 생성하고 생성된 테이블에 쿼리를 해서 그룹화 작업을 수행합니다. 이 테이블의 크기는 커질 수 있기 때문에 실제 개발 환경에서는 운영 DB가 아닌 임시 DB로 지정하시기 바랍니다.

 

 

 

열 탭

 

 

열 탭에서는 유사 항목 그룹화를 수행할 열을 지정하고, 그룹화 작업의 세부 설정을 지정합니다.

 

Ÿ           입력 열 입력 데이터에서 입력 열을 선택합니다.

Ÿ           출력 별칭 입력 열을 다른 이름으로 출력하고자 할 경우, 이 값을 변경하면 됩니다. 기본적으로 입력 열의 이름과 동일하게 설정됩니다.

Ÿ           그룹 출력 별칭 입력 데이터에 대해 그룹화 작업을 수행한 후, 가장 유사하다고 판단되는 그룹의 열 데이터를 출력할 때 사용할 열의 이름을 설정합니다. 기본적으로 출력 별칭 뒤에 _clean이라는 접미사가 붙는 형태입니다.

Ÿ           일치 유형 – Fuzzy로 설정하면 유사 비교를 수행하며, Exact로 설정하면 완전히 동일한 경우의 비교만 수행합니다.

Ÿ           최소 유사성 유사하다고 판단할 최소의 유사성 임계치를 설정합니다. 이 값은 현재의 열에 대한 비교 임계치입니다.

Ÿ           유사성 출력 별칭 입력 데이터와 그룹핑 한 데이터 간의 유사성 수치를 출력할 열의 이름을 설정합니다. 기본적으로 출력 별칭 앞에 _Similarity_ 접두사가 붙는 형태입니다.

Ÿ           숫자 입력 데이터에서의 숫자에 대한 처리 방식을 지정합니다.

ú           Neither – 입력 데이터의 앞부분 및 뒷부분의 숫자 모두 분류 작업에 특별한 의미가 없습니다.

ú           Leading – 입력 데이터의 앞부분에 나타나는 숫자만 의미가 있습니다.

ú           Trailing – 입력 데이터의 뒷부분에 나타나는 숫자만 의미가 있습니다.

ú           LeadingAndTrailing – 입력 데이터의 앞부분 및 뒷부분의 숫자 모두 의미가 있습니다.


여기서 의미가 있다는 것은 다음과 같습니다. 예를 들어 다음과 같은 형태의 데이터를 고려해 봅시다.
       “1Seoul”
       “2Seoul”
       “3Seoul”
이러한 데이터의 경우, 숫자의 속성 값을 Neither 또는 Trailing으로 지정한 경우, 앞부분의 숫자는 특별한 의미를 가지지 않기 때문에 유사성이 높은 동일한 그룹으로 분류됩니다. 하지만, Leading 또는 LeadingAndTrailing으로 지정한 경우, 뒷부분의 문자가 동일하더라도 앞부분의 숫자가 데이터를 구분하는 중요한 의미를 가진다는 것을 나타내기 때문에 동일한 그룹으로 분류하지 않습니다.

Ÿ           비교 플래그 문자열 데이터를 비교할 때의 비교 옵션을 지정합니다.

 

 

 

 

고급 탭

 

 

Ÿ           입력 키 열 이름 입력 데이터 각 행의 고유한 값을 나타내는 열의 이름을 지정합니다. 일반적으로 이 값은 1,2,3,… 과 같이 순차적인 값으로 설정됩니다.

Ÿ           출력 키 열 이름 입력 데이터가 그룹화 된 행의 고유 값을 나타냅니다.

Ÿ           유사성 점수 열 이름 입력 데이터와 이 데이터가 그룹화 되는 기준 데이터 간의 유사성 점수를 나타냅니다. 이 값은 0에서 1 사이이며, 1에 가까울수록 더 유사하다고 판단할 수 있습니다. 이 값은 열 탭에서의 각 열에 대한 유사성에 대한 평균값으로 변환 작업 전체에 대한 평균 유사성 점수를 나타내는 것입니다.

Ÿ           유사성 임계값 그룹화를 수행할 유사성 점수의 임계값을 설정합니다. 임계값이 높으면 그룹화 시키는 조건이 더 엄격해지므로 더 많은 그룹으로 분류가 되며, 반대로 임계값이 낮으면 더 적은 수의 그룹으로 분류됩니다.

Ÿ           토큰 구분 기호 입력 데이터를 그룹화 하는 최소 단위인 토큰으로 구분할 때 사용되는 토큰의 구분 기호를 설정합니다.

 

 

 

출력 형태 분석

 

 

위의 그림에서 붉은 색으로 테두리 한 부분을 살펴보겠습니다.

_key_in 열은 입력 데이터의 각 행에 대한 고유 키 값이며, 자동으로 생성됩니다.

_key_in의 값은 2이지만, _key_out의 값은 1입니다. 이는 두 번째의 입력 데이터가 1번 키 값을 가지는 데이터로 그룹핑 되었다라는 것을 말합니다.

_score는 행 전체에 대한 유사성 점수를 나타내며, 현재 유사 비교를 수행하는 열이 InputData라는 열 하나만 존재하기 때문에 _Similarity_InputData의 수치와 동일하게 0.5802794의 값을 나타내고 있습니다.

InputData의 값은 입력된 데이터를 나타내며, InputData_clean은 그룹화 되어 분류되는 값을 나타냅니다. , “EXEC VICE PRES”는 전체 데이터에 대해 유사 항목 그룹화 변환을 수행할 경우, “EXECUTIVE VICE PRESIDENT”이라는 값으로 처리됩니다.

_Similarity_InputData InputData열에 대한 유사성 점수를 나타냅니다.

 

 

 

유사성 임계값에 따른 그룹핑 결과 분석 표

다음은 동일한 데이터에 대해 고급 탭유사성 임계값을 달리했을 때의 출력 결과를 나타내는 표입니다.

 

입력 데이터 원본

유사성 임계값 : 0.75

유사성 임계값 : 0.50

유사성 임계값 : 0.25

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

EXEC VICE PRES

EXEC VICE PRES

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

EXECUTIVE VP

EXECUTIVE VP

EXEC VP

EXECUTIVE VICE PRESIDENT

EXEC VP

EXEC VP

EXEC VP

EXEC VP

EXECUTIVE VICE PRASIDENT

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

EXECUTIVE VICE PRESIDENT

FIELDS OPERATION MGR

FIELDS OPERATIONS MANAGER

FIELDS OPS MGR

FIELDS OPERATION MGR

FLDS OPS MGR

FLDS OPS MGR

FIELDS OPS MGR

FIELDS OPERATION MGR

FIELDS OPS MGR

FLDS OPS MGR

FIELDS OPS MGR

FIELDS OPERATION MGR

FIELDS OPERATIONS MANAGER

FIELDS OPERATIONS MANAGER

FIELDS OPERATIONS MANAGER

FIELDS OPERATION MGR

BUSINESS OFFICE MANAGER

BUSINESS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFFICE MNGR

BUS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFF MANAGER

BUS OFF MANAGER

BUS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFFICE MNGR

BUS OFFICE MNGR

BUS OFFICE MANAGER

BUS OFFICE MANAGER

BUS OFFICE MGR

BUS OFFICE MNGR

BUS OFFICE MANAGER

BUS OFFICE MANAGER

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

XRAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

XRAY TECH

XRAY TECH

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECH

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

X-RAY TECHNOLOGIST

총 데이터 수 : 18

그룹 수 : 11

그룹 수 : 6

그룹 수 : 5

 

 

 

반응형
반응형


유사 항목 조회

 

데이터를 처리하는 작업 중 데이터 정재 작업(Data Cleansing)을 해야 할 때가 종종 발생합니다. SQL 쿼리에서는 기본적으로 데이터가 완전히 일치하는 경우에만 매치됩니다. 물론 LIKE 연산자를 이용하여 유사 조회를 수행할 수 있습니다. 하지만, 이러한 유사 조회 작업은 제한적으로만 이용할 수 있으며 유사성 판단과 같은 작업을 수행하기에는 어려움이 있습니다..

 

예를 들어 다음과 같은 형태의 경우를 고려해 봅시다.

인터넷 사이트 초창기에는 사용자들로부터 직접 전체 주소 데이터를 입력 받는 경우가 종종 있었습니다. 지금은 대부분의 사이트가 우편번호를 선택하게 하여 주소의 앞부분은 우편번호 테이블에 있는 규격화된 형태로 입력이 되지만, 직접 입력하도록 한 경우에는 다양한 형태로 입력되었습니다.

 

Ÿ           서울특별시 강남구 삼성동

Ÿ           서울시 강남구 삼성동

Ÿ           서울 강남구 삼성동

Ÿ           서울 강남 삼성

 

사이트의 규모가 커지면서 이러한 정제되지 않은 데이터를 규격화된 데이터로 표준화 시키는 작업이 자주 발생되며, 이런 작업이 데이터 정재 작업의 예 입니다. 하지만 SQL 쿼리를 이용하여 데이터 정재 작업을 수행하는 것은 상당히 어렵고 고려해야 할 사항들이 많기 때문에 어려운 작업입니다. 이러한 작업을 수행하기 위해 텍스트 마이닝과 같은 고차원적인 데이터 처리 기법이 사용되기도 합니다.

 

SQL 2005 SSIS유사 항목 조회 변환을 이용하여 표준화 되지 않은 형태의 데이터를 쉽게 표준화 시킬 수 있습니다. 유사 항목 조회 변환을 수행할 때에는 원본 데이터에 대해 직접 처리하기 보다는 조회 변환 등을 이용하여 1차적으로 조회 작업을 수행한 후, 매핑 되지 않은 데이터에 대해 유사 항목 조회 변환을 수행하는 형태로 이용하는 것이 효율적입니다.

 

 

 

 

 

유사 항목 조회 변환조회 변환과 유사합니다. 조회 변환은 참조 테이블의 비교 항목과 정확히 일치하는 경우에만 출력하는데 비해 유사 항목 조회 변환은 정확히 일치하지는 않더라도 유사하다고 판단되는 수준일 경우 조회를 수행합니다.

 

참조 테이블 탭

 

 

참조 테이블 탭에서는 입력 데이터에 대해 조회 대상이 되는 참조 테이블을 지정하며, 유사 항목 조회 변환 수행 시 사용할 인덱스 테이블에 대한 설정을 지정합니다. 여기서 말하는 인덱스는 일반적으로 테이블에 설정하는 인덱스를 말하는 것이 아니며, 유사 비교를 수행할 때 이용하는 데이터 테이블을 말합니다.

 

새 인덱스 저장 옵션을 체크한 후, 새 인덱스 이름을 지정하면, 참조 테이블이 존재하는 DB에 지정한 이름의 인덱스 테이블이 생성됩니다.

저장된 인덱스 유지 관리 옵션을 체크하면 참조 테이블에 인덱스 테이블의 정보를 관리할 트리거가 생성됩니다. 이 트리거는 참조 테이블에 insert, update, delete 작업이 수행될 때 인덱스 테이블에 자동으로 반영하는 트리거입니다. 입력 데이터가 계속 변경되고 유사 항목 조회 작업을 반복적으로 수행해야 하는 상황일 때 이 옵션을 이용하여 인덱스 테이블을 효과적으로 관리할 수 있습니다. 대신, 데이터베이스에는

tg_DataCleaningMaintenance_PendingDelete__20060908_000000_fabb4233-bde1-4515-8d09-a89f35023b4e

tg_DataCleaningMaintenance_PendingInsert__20060908_000000_87baf700-b004-440e-b169-0659e166380d

등과 같은 형태로 관리 테이블이 생성됩니다.

 

기존 인덱스 사용을 선택하면 이미 생성되어 있는 인덱스 테이블을 그대로 사용할 수 있습니다.

 

 

 

 

열 탭

열 탭에서는 입력 데이터와 조회 데이터 간의 연결을 설정합니다. 또한 각 열의 연결에 대해 상세한 매핑 설정을 할 수 있습니다.

 

 

 

 

 

매핑 유형Fuzzy 또는 Exact로 설정할 수 있습니다. Fuzzy는 유사 조회를 수행하는 것이며, Exact는 정확히 일치하는 조회를 수행하도록 하는 것입니다. 모든 비교 열이 Exact일 때에는 조회 변환과 동일하게 수행됩니다. 유사 항목 조회 변환에 이러한 옵션이 있는 것은 다음과 같은 이유입니다. 예를 들어, A, B, C라는 원본 데이터의 열에 대해 A’, B’, C’라는 참조 테이블의 열과 유사 항목 조회 변환을 수행한다고 할 때, A 열과 A’ 열은 반드시 일치를 해야 하며, B B’, C C’는 어느 정도의 유사성만 있으면 매핑이 되도록 설정할 수 있습니다. 이 때, A A’의 매핑 유형은 Exact로 지정하고 나머지는 Fuzzy로 지정하면 됩니다.

 

비교 플래그문자열 비교 변환 또는 집계 변환 등에서와 같이 문자열 비교 시 비교 방법에 대해 설정합니다.

최소 유사성은 해당 열에 대한 매핑 작업 수행 시 매핑을 수행할 최소의 유사성을 지정하는 것입니다. 이 값은 0에서 1 사이의 값입니다. 예를 들어 B B’열 간의 매핑에서 최소 유사성을 0.80으로 설정한다면, 유사성이 0.8이상인 경우에만 매핑이 이루어집니다.

유사성 출력 별칭은 해당 열의 유사성을 출력할 열의 이름을 설정합니다.

 

 

 

고급 탭

 

 

조회당 출력에서 일치하는 최대 항목 수는 입력 데이터에 대해 유사 조회 연산을 수행하여 출력할 수 있는 최대의 항목 수를 지정하는 것입니다. 이 값을 1로 설정하면, 유사한 항목들로 판단되는 데이터 중 1개만 출력을 합니다. 예를 들어 서울 강동구라는 데이터에 대해 서울시 강동구가 유사도가 가장 높은 조회 데이터입니다. 하지만 서울시 강서구도 유사하다고 판단이 됩니다. 만약 이 값이 1인 경우에는 가장 유사하다고 판단되는 서울시 강동구가 출력되지만, 2로 설정한 경우, 두 개의 유사 데이터 모두가 출력됩니다.

 

유사성 임계값은 변환 전체의 유사성에 대한 임계값을 설정합니다. 이는 열 탭에서의 각 열의 최소 유사성과 비슷한 기능이지만, 전체 열에 대한 평균을 이용한다는 차이가 있습니다. 예를 들어 B B’열의 유사성은 0.9이며, C C’ 열의 유사성은 0.5 인 경우, 전체 유사성은 0.7이 됩니다. 만약 유사성 임계값 0.8로 설정했다면, 이 경우에는 유사 조회가 수행되지 않습니다.

 

토큰 구분 기호는 입력 데이터를 비교 가능한 개별 토큰으로 구분할 때 사용되는 구분자(Delimeter)를 지정하는 것입니다.

 

 

 

 

참고 유사성(Similarity)과 신뢰성(Confidence)

 

유사 항목 조회 변환 및 유사 항목 그룹화 변환에서는 유사성과 신뢰성이라는 두 가지의 수치가 사용됩니다.

유사성은 입력 데이터와 참조 데이터 사이의 문자적 유사성에 대한 측정치 입니다. 예를 들어 “AAA AA”라는 참조 데이터에 대해 “AAA AB”“AAA BB” 보다 유사성이 높습니다. 입력 데이터와 참조 데이터가 완전히 동일한 경우에는 유사성은 1이며, 완전 불일치인 경우에는 0이 됩니다.

신뢰성은 출력되는 데이터가 참조 테이블의 다른 일치 데이터들과 비교했을 때 가장 유사한 일치 항목이 될 수 있는지의 가능성을 나타내는 수치입니다. 입력 데이터에 대해 선택한 참조 데이터가 다른 유사한 항목 없이 가장 확실한 대상이 된다고 판단되는 경우 1이며, 다른 비슷한 형태의 유사 데이터가 존재하는 경우에는 0에 가깝습니다.

 

“Chapter 4”라는 입력 데이터에 대해 “Chapter 1”, “Chapter 2”, “Chapter 3”이라는 조회 데이터가 있을 때, 세 개의 데이터 모두가 유사 항목의 후보가 되며, 전체 8자리 중 7자리가 동일하기 때문에 이 입력 값에 대한 각 참조 데이터의 유사성은 높습니다. 하지만, 세 개의 참조 데이터 중 어떤 것이 가장 일치할 지를 알 수 없기 때문에 각 참조 데이터에 대한 신뢰성은 낮습니다. 만약 입력 데이터가 “3”인 경우, 유사 항목의 후보가 될 수 있는 것은 “Chapter 3”만 가능합니다. 이 경우, 8자리 중 한 자리만 동일하기 때문에 유사성은 매우 낮지만, 유사 항목은 하나만 존재하기 때문에, 신뢰성은 높습니다.

(실제로 “Chapter 3”“3”으로는 유사성이 매우 낮기 때문에 유사 조회가 이루어지지 않습니다. 설명을 위해 예를 든 것입니다.)

 

 

 

따라하기

다음과 같은 형태의 주소 데이터에 대해 유사 항목 조회 변환을 수행하는 예제를 구현해 보겠습니다.

 

 

 

1.       쿼리 분석기를 이용하여 다음과 같은 참조 테이블을 생성합니다. 본 예제에서는 tempdb SIDO 라는 이름으로 테이블을 만들겠습니다.

 

USE tempdb

GO

 

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SIDO]') AND type in (N'U'))

DROP TABLE [dbo].[SIDO]

GO

 

CREATE TABLE SIDO

(

Seq INT IDENTITY,

Address VARCHAR(17) COLLATE Korean_Wansung_CI_AS NULL

)

GO

 

INSERT SIDO(Address) VALUES ('서울시 강동구')

INSERT SIDO(Address) VALUES ('서울시 강서구')

INSERT SIDO(Address) VALUES ('서울시 송파구')

INSERT SIDO(Address) VALUES ('서울시 강남구')

INSERT SIDO(Address) VALUES ('부산시 해운대구')

INSERT SIDO(Address) VALUES ('부산시 사하구')

INSERT SIDO(Address) VALUES ('부산시 서구')

GO

 

2.       빈 패키지 파일을 하나 추가한 후, 데이터 흐름 작업을 추가합니다.

 

3.       아래 부분에 있는 연결 관리자에서 tempdb를 지정하는 OLE DB 연결을 생성합니다. 이 연결은 유사 조회 변환에서 참조 테이블을 읽어오는 데 이용될 것입니다.

 

4.       연결 관리자에서 플랫 파일 연결을 생성합니다. 플랫 파일 연결의 원본 파일은 본 예제의 입력 데이터인 유사조회입력데이터.txt이며, 첫 번째 데이터의 행의 열 이름(A) 옵션을 선택하고 고급 탭에서 유형 제안(S)를 눌러 데이터의 유형을 자동으로 설정하도록 합니다.



5.       데이터 흐름 영역에서 플랫 파일 원본을 추가한 후, 4에서 추가한 플랫 파일 연결로 지정합니다.

 

6.       왼쪽 도구 상자에서 조회 변환을 하나 추가한 후, 플랫 파일 원본의 녹색 선과 연결합니다. 입력 데이터 중, 100% 일치하는 데이터를 먼저 추출하는 작업을 수행하도록 하는 것입니다.

 

7.       조회 변환 편집기에서 참조 테이블[dbo].[SIDO]로 설정하고, 열 탭에서 사용 가능한 입력 열주소 열과 사용 가능한 조회 열Address 열을 연결시킨 후, Address 열에 체크합니다.





8.       조회 변환 편집기의 아래 부분에 있는 오류 출력 구성(G)를 눌러 오류 출력 구성 창을 띄운 후, 오류 부분구성 요소 실패에서 행 리디렉션 으로 변경합니다. 조회 변환에서 조회가 이루어지지 않은 입력 데이터는 오류로 처리가 되어 별도의 경로로 출력 시키도록 하는 작업입니다. 확인을 눌러 오류 출력 구성 창을 닫은 후, 다시 확인을 눌러 조회 변환 편집기를 닫습니다.



9.       도구 상자에서 유사 항목 조회 변환을 하나 추가한 후, 조회 변환의 붉은 색 선과 연결 시킵니다. 연결 시킬 때, 자동으로 오류 출력 구성 창이 나타나는데, 이미 8에서 설정했기 때문에 확인을 누르시면 됩니다.

 

10.   유사 항목 조회 변환을 더블 클릭하여 나타나는 유사 항목 조회 변환 편집기참조 테이블 탭에서 조회할 테이블을 지정합니다. 조회할 테이블은 7에서와 같이 [dbo].[SIDO] 테이블입니다. 또한 열 탭에서도 동일하게 주소 열과 Address 열을 연결시킵니다.



11.   고급 탭에서 지정된 속성에 대해서는 별도의 변경 없이 기본값으로 적용하겠습니다. 예제가 완료된 후, 조회당 출력에서 일치하는 최대 항목 수(X) 값이나 유사성 임계값(H)등을 변경하여 테스트 해 보시기 바랍니다.

 

12.   도구 상자에서 UNION ALL 변환을 추가한 후, 조회 변환의 녹색 선과, 유사 항목 조회의 녹색 선을 연결합니다.



13.   데이터 흐름 영역의 빈 곳에서 마우스 오른쪽 클릭을 하여 나타나는 메뉴 중 변수(S)를 선택하여 변수 창을 띄운 후, tempResult라는 이름의 Object 형 변수를 하나 추가합니다. 이는 임시 데이터 대상으로 쓰일 레코드 집합 대상에서 이용할 임시 변수입니다.



14.   도구 상자에서 레코드 집합 대상을 추가한 후, UNION ALL 변환의 녹색 선과 연결합니다. 레코드 집합 대상을 더블 클릭하여 레코드 집합 대상 편집기를 띄운 후, 구성 요소 속성 탭에서 VariableName 부분에 tempResult를 입력합니다. 입력 열 탭에서는 세 개의 열을 모두 선택합니다.



15.   데이터가 처리되는 과정을 확인하기 위해 중간 경로에 데이터 뷰어를 추가합니다. 조회 변환UNION ALL 변환 간의 녹색 경로를 더블 클릭한 후 나타나는 데이터 흐름 경로 편집기데이터 뷰어 탭에서 추가(A)를 누른 후 표 형태의 뷰어를 추가합니다. 이와 동일한 방법으로 유사 항목 조회 변환UNION ALL 변환 사이의 경로 및 UNION ALL 변환레코드 집합 대상 간에도 데이터 뷰어를 추가합니다.



16.   패키지를 수행시켜 유사 항목 조회가 수행되는 결과를 확인합니다.



 

     

반응형
반응형


샘플링 변환

 

행 샘플링 변환비율 샘플링 변환을 이용하여 전체 데이터에서 샘플 데이터를 추출하는 작업을 수행할 수 있습니다. 행 샘플링 변환은 입력 데이터에서 지정한 행 수만큼 샘플 대상을 추출하여 출력하는 작업이며, 비율 샘플링 변환은 입력되는 데이터에 대해 정해진 비율만큼을 대상으로 추출하여 출력하는 작업입니다.

 

데이터 샘플링은 데이터 관련 작업에서 자주 수행되는 작업 형태 중 하나입니다. 예로 다음과 같은 경우를 생각해 볼 수 있습니다.

1.       전체 회원 데이터 중, 특정 수 만큼의 샘플 대상을 추출해야 할 경우

2.       웹 로그 데이터와 같이 대량의 데이터에 대해 전수조사 대신 표본조사를 수행해야 할 경우

 

행 샘플링 변환비율 샘플링 변환은 거의 유사하지만, 샘플의 수을 정하는 방법에서만 차이가 있습니다.

예를 들어 100,000개 샘플과 같이 정확한 수의 샘플이 필요할 때에는 행 샘플링 변환을 사용하며, 원본 데이터의 10% 또는 원본 데이터의 3% 등과 같은 형태로 비율로 설정할 때에는 비율 샘플링 변환을 이용하면 됩니다.

 

 

 

 

Ÿ         샘플 출력 이름 입력 데이터에 대해 샘플 행 수 또는 행의 백분율만큼의 샘플 데이터를 추출한 후, 출력할 경로의 이름을 지정합니다. 예를 들어 1,000개의 데이터 중 행의 백분율로 30으로 정했다면, “선택된 행에서 샘플링 출력이라는 경로로 300개의 데이터가 출력되고, “선택되지 않은 행에서 샘플링 출력이라는 경로로 나머지 700개의 데이터가 출력됩니다.

Ÿ         선택하지 않은 출력 이름 샘플링을 해서 출력시킨 후, 남은 데이터를 출력할 경로를 지정합니다.

Ÿ         다음과 같은 임의 초기값 사용 이 옵션을 체크하지 않으면, 변환 작업이 수행될 때마다 항상 다른 샘플을 추출하게 됩니다. 하지만, 이 옵션을 체크한 후, 임의의 초기값(Seed )을 지정하게 되면, 동일 데이터에 대해 Seed 값에 따라 출력되는 값은 항상 동일합니다. 동일 샘플에 대해 계속해서 조사를 하는 추적 조사(Tracking Research)의 대상 선정이나, 문제가 있는 샘플에 대한 프로그램 개발 작업 등에서 이용할 수 있습니다.

 

행 샘플링 변환은 입력 데이터를 전부 다 읽은 후 샘플을 추출하여 출력하는데 비해, 비율 샘플링 변환은 어느 정도의 데이터가 입력되면 동시에 샘플링 한 데이터를 출력합니다. 또한, 행 샘플링 변환은 변환 편집기에서 지정한 숫자만큼 정확히 샘플을 추출하지만, 비율 샘플링 변환은 약간의 오차가 있을 수 있습니다. , 10,000,000개의 데이터에 대해 30%라고 지정을 하더라도, 정확히 3,000,000개의 데이터가 출력되지 않고 3,000,000개 내외의 데이터가 추출될 수 있습니다.

 

패키지 수행 시 출력 비교

 

 

행 샘플링과 비율 샘플링의 정확도 차이

 

 

반응형
반응형


조회 변환

 

입력 데이터에 대해 코드 테이블 또는 디멘젼 테이블과 같은 참조 테이블의 정보를 조회할 때 사용할 수 있는 변환입니다. 조회 변환SQL 2000 DTSData Pump 작업이나 데이터 기반 쿼리 작업 에서 이미 있었던 기능이지만, SQL 2005 SSIS에서는 캐싱 옵션 설정이나 간단한 설정 방법 등 많은 점이 개선되었습니다.

 

다음과 같은 작업을 고려해 봅시다.

 

 

입력 데이터의 CustomerID를 이용하여 조회 데이터 테이블인 Sales.Customer 에서 CustomerID 열을 이용하여 AccountNumber 값을 찾아내어 결합하여 출력하는 형태의 작업입니다. 위의 그림과 같이 조회 변환은 조인 연산(INNER JOIN 또는 OUTER JOIN)과 유사합니다. 실제로, DW(Data Warehouse)환경에서 팩트 테이블과 디멘젼 테이블 간의 조인 작업 시 SQL문의 조인 연산이나 SSIS병합 조인 변환 대신, 조회 변환을 많이 사용합니다.

조회 변환조인 연산과 다른 점은 다음과 같습니다.

 

       조회 데이터를 메모리에 캐싱 시킨 후 처리할 수 있습니다. 캐싱 방법도 전체 캐싱 및 부분 캐싱 등으로 설정할 수 있으며, 캐싱을 통해 조회 성능이 매우 향상될 수 있습니다.

       입력 데이터에는 있는 값이 조회 데이터에 없는 경우에 대해 효율적으로 처리할 수 있습니다. 예를 들어 입력 데이터에서 999999라는 CustomerID 값이 있지만, 조회 테이블에는 이 값이 없는 경우, INNER JOIN 연산에서는 해당 원본의 값이 제외되어 처리가 되며, LEFT OUTER JOIN 의 경우에는 NULL로 결과가 출력됩니다. 조회 변환에서는 에러로 처리가 되며, 이러한 에러 데이터는 조회 변환 내의 오류 출력을 이용하여 다른 경로로 출력하여 처리할 수 있습니다.

       하나의 입력 데이터 열에 두 개 이상의 조회 데이터가 매핑 되는 경우, 별도의 중복 제거 작업이 필요하지 않습니다. 예를 들어 입력 데이터의 676이라는 CustomerID 값이 조회 데이터에 두 개 이상 존재할 때, INNER JOIN 이나 LEFT OUTER JOIN 연산 모두 각각의 데이터에 대해 연산을 수행합니다. 결과적으로 입력 데이터의 수보다 출력 데이터의 수가 많아지게 되는 오류가 발생합니다. 조회 변환을 이용하면, 조회 데이터의 항목이 여러 개이더라도, 자동으로 처음 매핑이 되는 값만 반환합니다. DW 환경에서 디멘젼을 잘못 관리하여 발생할 수 있는 중복 데이터 문제 등을 제거할 수 있습니다.

 

조회 변환 편집기는 세 개의 탭으로 구성되어 있습니다.

 

참조 테이블 탭에서는 조회 테이블을 설정하게 됩니다. OLE DB 연결을 이용하여 테이블 또는 쿼리를 지정합니다. 직접 테이블을 지정할 수 있지만, 가급적 필요한 열만을 포함하는 SQL 쿼리로 작성하시기 바랍니다.

 

 

탭에서는 입력 데이터와 참조 데이터 간의 연결을 설정하며, 참조 데이터에서 출력할 열을 지정합니다.

 

 

고급 탭에서는 참조 테이블의 캐싱을 설정합니다.

 

 

      메모리 제한 사용(M)을 체크하지 않으면 전체 캐싱으로 설정되어 참조 테이블 전체가 메모리에 캐싱됩니다.

      메모리 제한 사용(M)을 체크한 후, 캐싱 사용(C)을 체크하지 않으면 캐싱을 하지 않습니다.

      메모리 제한 사용(M)을 체크한 후, 캐싱 사용(C)을 체크하고, 캐시 크기를 설정하면 부분 캐싱을 수행합니다.

 

SQL 문 캐싱(S)을 설정하면, 참조 테이블 전체를 캐싱하는 대신 참조 테이블에서 조회 되는 데이터에 대해서만 캐싱 되도록 설정합니다. 이 때, 매개 변수를 이용한 SQL 문이 사용되며, SQL 문 또한 캐싱이 되어 수행됩니다. 조회 테이블이 상당히 큰 경우에는 이 옵션을 사용하는 것이 전체 테이블을 캐싱하는 것에 비해 더 유리할 수 있습니다.

 

 

 

  기본적인 조회를 하면 inner join이 되는 것 같습니다. left join으로 할려고 하면, 어디서 설정을 하나요?
첫번째 그림의 AccountNumber가 NULL 이 나오는 것을 handling 하고자 합니다


->AccountNumber가 NULL로 나오는 것은 조회가 안되어 오류로 출력됩니다.
다음 예제에서 조회 오류에 대한 처리 방법을 참고하세요~^^
http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=682

반응형
반응형

따라하기

 

다음과 같은 형태의 간단한 피벗 변환피벗 해제 변환을 구현해 보겠습니다.

 

 

[입력 데이터 설정]

1.        메모장을 이용하여 다음과 같은 입력 데이터를 생성합니다.
Pivot_Source.txt

아이디    성별       연령대    금액

AAA                 20~24  100

BBB                 25~29  50

CCC                 35~39  30

DDD                 25~29  60

EEE                 30~34  150

 

[피벗 변환 구성]

2.        빈 패키지 파일을 하나 추가한 후, 데이터 흐름 작업을 추가합니다.

3.        플랫 파일 원본을 추가한 후, 1단계에서 생성한 파일을 지정합니다. 이 때, 플랫 파일 연결 관리자 편집기에서 첫 번째 데이터 행의 열 이름(A) 옵션을 체크하여 열 이름을 지정하고, 고급 탭에서 유형 제안(S)을 이용하여 데이터의 유형을 자동으로 설정합니다.



4.        플랫 파일 원본에서는 아이디 열이 필요하지 않기 때문에, 아이디 열은 제외합니다.



5.        왼쪽 도구 상자에서 피벗 변환을 추가한 후, 플랫 파일 원본과 연결한 후, 피벗 변환을 더블 클릭하여 고급 피벗 편집기를 엽니다.

6.        고급 피벗 편집기입력 열 탭에서 피벗 변환에 사용할 열을 지정합니다.



7.        /출력 속성 탭에서 왼쪽의 /출력(I) 부분 중, 피벗 기본 입력 à 입력 열을 확장합니다.

8.        성별 열을 클릭한 후, 오른쪽의 속성 창에서 사용자 지정 속성에 있는 PivotUsage의 값을 0에서 2로 변경합니다. 2피벗 변환에서 열 속성을 가지도록 설정하는 것입니다.



9.        동일한 방법으로 연령대 열의 PivotUsage 속성은 1로 변경합니다. 1피벗 변환에서 행 속성을 가지도록 설정하는 것입니다. 그리고, 속성 창에서 연령대 열의 LineageID 값을 확인합니다. LineageID값은 입력 열과 출력 열을 연결할 때 사용되는 ID 값입니다. 본 예제에서는 26 입니다.



10.    금액 열의 PivotUsage 속성을 3으로 변경합니다. 3값 속성을 가지도록 설정하는 것입니다. 그리고, 연령대 열과 마찬가지로 금액 열의 LineageID 값을 확인합니다. 본 예제에서는 30 입니다.

 

11.    출력할 열을 설정합니다. 피벗 기본 출력을 확장한 후, 출력 열을 선택하고 아래에 있는 열 추가(C) 버튼을 클릭하여 열을 추가합니다. 추가한 열의 이름을 성별로 변경한 후, 속성 창에서 사용자 지정 속성 부분에 있는 SourceColumn 8단계에서 확인한 성별 입력 열의 LineageID (22)으로 설정합니다. 이 값을 설정하면 데이터 형식이 자동으로 입력 열의 형식과 동일하게 변경됩니다.



 

12.    열 추가(C) 버튼을 클릭하여 새로운 열을 추가한 후, 열 이름을 남자로 변경하고 사용자 지정 속성의 PivotKeyValue을 입력합니다. SourceColumn 속성에는 10단계에서 확인한 금액 입력 열의 LineageID (30)을 설정합니다.



 

13.    동일한 방식으로 열을 하나 더 추가한 후, 열 이름을 여자로 변경하고 사용자 지정 속성의 PivotKeyValue’, SourceColumn 속성에 금액 입력 열의 LineageID (30)을 설정합니다.

 

[피벗 해제 변환 구성]

14.    도구 상자의 피벗 해제 변환 데이터 흐름 영역에 추가한 후, 피벗 변환과 연결합니다.

15.    피벗 해제 변환을 더블 클릭하여 피벗 해제 변환 편집기를 연 후, 사용 가능한 입력 열에서 남자여자 열을 선택합니다. 그런 후, 대상 열피벗 키 값, 피벗 키 값의 열 이름을 다음과 같이 설정합니다.



 

16.    데이터 흐름 영역에서 마우스 오른쪽 클릭을 한 후 나타나는 메뉴 중, 변수(S)를 클릭하여 변수 설정 창을 띄웁니다. TempResult 라는 이름의 Object 형 변수를 하나 추가합니다. 이 변수는 임시로 대상 개체로 쓸 레코드 집합 대상에서 이용될 변수입니다.



 

 

[데이터 대상 구성]

17.    데이터 흐름 영역레코드 집합 대상을 추가한 후, 피벗 해제 변환과 연결합니다.

 

18.    레코드 집합 대상을 더블 클릭하여 나타나는 고급 레코드 집합 대상 편집기에서 구성 요소 속성 탭의 VariableName 속성에 변수 명 TempResult 를 추가합니다.



 

19.    입력 열 탭의 사용 가능한 입력 열에서 모든 열을 체크한 후, 확인을 눌러 속성 편집기를 닫습니다.

 

[데이터 뷰어 구성]

20.    플랫 파일 원본피벗 변환이 연결된 연결 경로를 더블 클릭하여 데이터 흐름 편집기를 띄웁니다.



21.    데이터 흐름 경로 편집기데이터 뷰어 탭에서 추가(A)를 눌러 데이터 뷰어 구성을 실행시킨 후, 유형에서 를 선택하고 확인을 누릅니다.



22.    플랫 파일 원본피벗 변환 사이의 경로에 데이터 뷰어가 설정되었습니다. 데이터 뷰어에 대해서는 별도의 강좌에서 자세히 다루겠습니다. 이와 같은 방식으로, 피벗 변환피벗 해제 변환 사이의 경로와, 피벗 해제 변환레코드 집합 대상 사이의 경로에도 데이터 뷰어를 추가합니다.

 

23.    패키지를 실행시켜 변환이 진행될 때의 데이터 변경 사항을 확인합니다.



 

반응형
반응형

피벗 변환

 

피벗 변환을 설명하기 전에 우선 피벗 연산에 대해 살펴보겠습니다.

 

아이디

성별

연령대

금액

AAA

20~24

100

BBB

25~29

50

CCC

35~39

30

DDD

25~29

60

EEE

30~34

150

 

위와 같은 데이터에 대해 다음과 같은 형태로 집계할 수 있습니다.

또는 반대로, 다음과 같은 형태로 집계를 할 수도 있습니다.

엑셀에서는 위의 데이터를 이용하여 쉽게 피벗을 구현할 수 있습니다. 하지만, SQL 쿼리를 이용하는 경우에는 다음과 같은 형태의 복잡한 쿼리를 이용해야 합니다.

 

             SELECT [성별],

                           SUM(CASE WHEN [연령대] = ‘20~24’ THEN [금액] ELSE 0 END) AS [20~24],

                           SUM (CASE WHEN [연령대] = ‘25~29’ THEN [금액] ELSE 0 END) AS [25~29],

                           SUM (CASE WHEN [연령대] = ‘30~34’ THEN [금액] ELSE 0 END) AS [30~34],

                           SUM (CASE WHEN [연령대] = ‘35~39’ THEN [금액] ELSE 0 END) AS [35~39]

             FROM [테이블]

             GROUP BY [성별]

             GO

 

             SELECT [연령대],

                           SUM(CASE WHEN [성별] = ‘’ THEN [금액] ELSE 0 END) AS [],

                           SUM(CASE WHEN [성별] = ‘’ THEN [금액] ELSE 0 END) AS []

             FROM [테이블]

             GROUP BY [연령대]

             GO

 

SQL Server 2005에서는 PIVOT, UNPIVOT 연산이 추가되어 위의 경우보다는 단순하게 쿼리가 가능합니다.

 

SQL 2005 SSIS에서는 피벗 변환을 이용하여 이와 같은 기능을 구현할 수 있습니다. 물론, SQL Server의 테이블에 저장된 데이터뿐만 아니라 어떠한 형태의 입력 데이터에 대해서도 피벗 구현이 가능합니다.

 

 

피벗 변환은 기본적으로 고급 피벗 편집기에서 속성을 설정하게 됩니다. 입력 열 탭에서는 입력 데이터에서 피벗 연산에 쓰일 열을 선택합니다.

 

/출력 속성 탭의 설정을 설명하기 전에 다음과 같은 사항을 다시 명확히 설명하겠습니다.

피벗 변환에서는 입력 데이터의 열에 대해 피벗 결과의 용도를 설정합니다. 위의 입력 데이터에 대해 다음과 같은 형태의 피벗 결과를 생성한다고 할 때, [연령대] 열이 행 속성이 되는 열이 됩니다. 그리고, [성별] 열의 [], []의 값이 열 속성이 되며, [금액]값 속성이 됩니다.

 

 

 

입력 열의 각 열에 대해 PivotUsage 값을 지정합니다.

            

PivotUsage

설명

0

열이 피벗 연산에 참여하지 않고 바로 출력됩니다.

1

행 속성을 가지는 열입니다.

2

이 열의 값이 열 속성을 가지게 됩니다.

3

값 속성을 가지는 열입니다.

 

피벗 기본 출력 부분에서는 행 속성을 가지는 열 및 열 속성을 가지는 열을 생성시키며, 입력 열과의 연결을 설정합니다. 자세한 사항은 아래의 따라하기를 참고하시기 바랍니다.

 

 

ú           ComparisonFlags – 그룹핑 작업을 수행할 때 문자열에 대한 비교 처리 방법입니다. /소문자 구분이나 문자 너비, 기호 무시 등의 문자열 비교 속성을 설정할 수 있습니다.

ú           PivotKeyValue – SQL 쿼리의 [ CASE WHEN 컬럼명 = ‘조건값  THEN …] 형태에서 조건값에 해당하는 값을 지정합니다. 위의 그림에서는 출력 열 [여자] PivotKeyValue에서 지정한 라는 값일 경우, 연산을 수행하는 것을 의미합니다.

ú           SourceColumn – 연산을 수행할 값의 LineageID(계보 ID) 값입니다. 본 그림에서는 금액 열의 속성 중 LineageID 값을 나타냅니다. 이 값을 지정하게 되면 자동으로 데이터 형식 속성의 DataType 속성이 변경됩니다.

 

 

참고 엑셀의 피벗 연산과 SSIS의 피벗 변환과의 차이점

엑셀을 이용한 피벗 연산이나 CASE WHEN 문을 이용하는 SQL 쿼리를 이용한 결과와 SSIS의 피벗 변환 결과에는 다음과 같은 차이점이 있습니다.

예제 데이터를 이용해서 설명 하겠습니다.

 

아이디

성별

연령

User1

30

1

User2

25

1

User3

25

1

 

위의 데이터와 같이, 피벗에서 사용할 열과 행의 값이 고유한 경우는 출력 결과가 모두 동일합니다.

 

성별

25

30

1

1

1

 

 

 

하지만, 일반적으로 동일한 피벗 속성의 여러 값이 존재합니다.

 

아이디

성별

연령

User1

30

1

User2

25

1

User3

25

1

User4

25

1

User5

25

1

 

이와 같은 경우, 엑셀 또는 SQL 쿼리를 이용한 피벗 결과는 다음과 같은 형태입니다.

 

성별

25

30

2

1

2

 

 

하지만, SSIS피벗 변환은 이와는 다른 결과가 출력됩니다.

성별

25

30

1

1

1

 

1

 

1

 

 

엑셀이나 SQL 쿼리와 같은 형태로 출력하도록 하기 위해서는 피벗 변환 후, 집계 변환을 이용하여 GROUP BY 연산을 수행해야 제대로 된 결과를 출력할 수 있습니다. 이런 속성은 SQL 2005에 새롭게 추가된 PIVOT 연산도 동일합니다.

 

 

 

피벗 해제 변환

 

피벗 해제 변환피벗 변환과는 반대로 피벗 형태의 출력 결과를 일반 데이터 형태로 변환하는 개체입니다.

피벗 해제 변환은 피벗 키 값에서 데이터 열로 변환될 값과 열 이름을 지정합니다.

      입력 열 지정 원본 데이터에서 피벗 해제를 수행할 열을 선택합니다.

      대상 열 값으로 출력될 열의 이름을 지정합니다.

      피벗 키 값 피벗에서 열 속성의 열 이름을 지정합니다.

      피벗 키 값 열 이름 - ③의 값들을 나타낼 열의 이름을 지정합니다.

 

반응형
반응형

용어 추출 변환

 

용어 추출 변환은 입력 데이터에서 명사 또는 명사구의 형태로 용어를 추출하는 작업입니다.

텍스트 입력 데이터에 대해, 용어 형태 및 빈도 임계값, 최대 용어 길이 등의 옵션을 설정하여 용어를 추출합니다. 이러한 변환 작업은 텍스트 형태의 기사나 이메일 등의 데이터로부터 주요 이슈 사항을 추출하여 분류, 분석하는 작업에 이용될 수 있습니다

 

※ 이 변환 작업은 한글 데이터는 안되며, 영어 텍스트 데이터만 가능합니다. 또한, 입력 데이터는 유니코드 문자열(DT_WSTR) 또는 유니코드 텍스트(DT_NTEXT)형만 가능합니다.

 

용어 추출 변환은 다음과 같은 특징이 있습니다.

1.        관사와 대명사는 추출하지 않습니다. – 예를 들어 the bicycle, my bicycle 의 데이터는 모두 bicycle로 추출됩니다.

2.        기본적으로 대/소문자를 구분하지 않습니다고급 옵션의 대/소문자 구분 옵션을 설정하지 않는 경우, bicycle 이나 Bicycle, BICYCLE 등을 모두 bicycle로 분류합니다.

3.        /복수를 동일하게 추출합니다. - bicycles 와 같이 복수 형태의 단어도 단수로 처리됩니다. 예를 들어, men man으로, mice mouse, bicycles bicycle로 분류합니다.

4.        변환은 사전에 캐시된 모드에서 수행됩니다. 제외 탭에서 제외할 용어 데이터를 설정한 경우에는 이 데이터 집합 또한 전용 메모리 공간에 저장됩니다.

5.        변환은 내부의 자체 알고리즘과 통계 모델을 사용합니다. 따라서 사용자가 원하는 형태의 결과가 나오지 않을 수 있기 때문에, 고급 탭에 있는 다양한 옵션을 이용하여 출력 형태를 설정해야 합니다.

 

 

용어 추출 변환 편집기는 용어 추출, 제외, 고급 탭으로 구성되어 있습니다.

 

용어 추출

입력 데이터에서 용어를 추출할 열을 선택합니다. 출력 열에서는 추출한 용어를 나타낼 열 이름과 빈도수를 나타내는 점수 열의 이름을 설정합니다.

 

제외

입력 데이터에서 추출하는 용어 중, 제외할 용어가 있을 때 이 탭에서 설정합니다. 제외할 용어를 별도의 테이블에 저장시킨 후 이를 참조하도록 설정할 수 있습니다.

 

 

고급

Ÿ           용어 유형

ú           명사 단일 명사만을 추출합니다. bicycle, landscape 등이 명사 입니다.

ú           명사구 명사구 형태의 데이터만 추출합니다. 명사구는 하나의 명사와 명사 또는 형용사를 포함하는 두 개 이상의 단어입니다. 예를 들어, beautible bicycle 이 명사구가 됩니다.

ú           명사 및 명사구 명사와 명사구 용어 모두를 추출합니다.

 

Ÿ           점수 유형

ú           빈도 점수 유형을 빈도로 설정합니다.

ú           TFIDF – 점수 유형을 TF(용어 빈도) IDF(역 문서 빈도)의 곱으로 설정합니다. 계산 식은 다음과 같습니다.
            
용어 T TFIDF = (용어 T의 빈도) * log((입력 데이터의 행 수) / (용어 T를 포함하는 행 수))

 

Ÿ           매개 변수

ú           빈도 임계값 단어 또는 구로 추출되기 위한 최소의 임계치 입니다. 예를 들어 이 값을 5로 설정한 경우, 해당 용어가 5회 이상 나와야 출력에 포함될 수 있습니다.

ú           최대 용어 길이 추출되는 용어의 최대 길이를 설정합니다. 이 값은 명사구에만 영향을 줍니다.

 

Ÿ           옵션

ú           /소문자 구분 용어 추출 사용 용어 추출 시 대/소문자 구분 여부를 설정합니다. 이 때, 단어에 첫 번째 글자가 대문자인 것은 별도로 구분되지 않습니다. , Bicycle bicycle로 분류가 되며, Bicycle 또는 BICYCLE 등과 같은 경우는 별도의 용어로 분류됩니다.

 

 

다음과 같은 출력 데이터에 대해 고급 옵션의 설정에 따른 결과를 살펴봅시다.

 

 

1.       용어 유형 : 명사, 점수 유형 : 빈도, 빈도 임계값 : 1, 옵션 : /소문자 구분 없음

 

2.       용어 유형 : 명사구, 점수 유형 : 빈도, 빈도 임계값 : 1, 옵션 : /소문자 구분 없음

 

3.       용어 유형 : 명사, 점수 유형 : 빈도, 빈도 임계값 : 1, 옵션 : /소문자 구분

 

 

 

용어 조회 변환

 

용어 조회 변환은 입력 데이터에서 미리 정의된 참조 데이터의 용어가 얼마나 나타나는지를 조회하는 변환입니다. 이 변환 역시 영문 데이터에 대해서만 정상적으로 수행되며, 입력되는 데이터는 유니코드 자형(DT_WSTR)또는 유니코드 텍스트(DT_NTEXT) 데이터입니다.

참조 데이터로 사용될 수 있는 형태는 OLE DB 연결만 가능하며, SQL Server 2000 또는 SQL Server 2005, Access 데이터베이스의 테이블만 가능합니다.

미리 정의된 용어 리스트를 별도의 테이블에 저장한 후, 변환 작업 시 메모리에 전부 캐싱되어 수행됩니다.

 

용어 조회 변환 출력 결과는 입력 데이터에 용어 열과 빈도가 추가됩니다. 빈도 계산은 입력 데이터 행 단위로 수행됩니다.

 

 

 

 

용어 추출 변환 및 용어 조회 변환은 형태소 분석을 통하여 용어를 분리하는 매우 유용한 작업입니다. 하지만, 영어에 대해서만 지원한다는 아쉬운 점이 있습니다.

반응형
반응형

병합 조인 변환

 

병합 조인 변환은 병합 변환과 마찬가지로 두 개의 정렬된 입력 데이터에 대한 변환 작업입니다. SQL 쿼리에서 JOIN 문을 이용하는 것과 같이 두 입력 데이터에 대해 조인 연산을 수행합니다. 수행할 수 있는 조인은 내부 조인(Inner Join), 왼쪽 우선 조인(Left Outer Join), 완전 조인(Full Outer Join)입니다. 입력 데이터가 정렬되어야 하며, 단지 두 개의 입력에 대해서만 조인 연산을 수행할 수 있다는 점에서 SQL 쿼리의 조인 연산과 비교해 볼 때 비효율적일 수 있습니다. 하지만, 입력 데이터가 SQL 데이터가 아니거나 또는 서로 다른 유형인 경우, 별도의 임시 저장 테이블(Staging Table)에 데이터를 로딩한 후 SQL 쿼리를 이용하여 조인 연산을 수행하는 대신 데이터를 원본에서 읽어온 후 바로 조인 연산을 수행할 수 있다는 점에서 매우 효과적입니다. 또한, 쿼리를 직접 작성하는 대신 마우스로 조인을 설정하고 출력 열을 설정하는 방식은 개발자의 코딩 작업을 줄여줄 수도 있습니다.

 

[참고]

1.       SQL 쿼리에서는 오른쪽 우선 조인(Right Outer Join)이 있지만, 병합 조인 변환에서는 없습니다. 대신, 오른쪽 우선 조인은 왼쪽 우선 조인에서 입력 바꾸기를 이용하여 두 입력을 서로 바꾸어서 수행하면 됩니다.

 

2.       동일 인스턴스에 있는 SQL Server의 테이블이 입력 데이터인 경우에는, 병합 조인 변환 대신 OLE DB 원본SQL 명령에서 SQL문을 이용한 조인을 수행하는 방식이 더 효과적입니다.

 

 

 

입력 데이터를 병합 조인 변환으로 연결할 경우, 위의 그림에서와 같이 입력 유형을 설정해야 합니다. 내부 조인이나 왼쪽 우선 조인인 경우, 왼쪽 입력이 조인 연산의 기준이 되는 입력이 됩니다. 입력되는 데이터는 정렬된 속성을 가지고 있어야 합니다. 입력 데이터의 정렬 속성은 다음을 참고하시기 바랍니다.

 

 

두 입력을 지정한 후, 병합 조인 변환 편집기에서 조인할 열과 출력할 열을 설정합니다. 조인할 열은 정렬이 된 열이어야 하며, 출력 별칭을 이용하여 출력 열의 이름을 변경할 수 있습니다. 위의 그림에서 순서는 정렬 방식을 나타냅니다. 1은 오름차순을 나타내며, -1은 내림차순을 나타냅니다. 입력 바꾸기(S) 버튼은 왼쪽 우선 외부 조인인 경우에만 활성화 됩니다.

 

다음과 같은 두 입력에 대해 각각의 조인 형태에 따른 결과를 참고하시기 바랍니다.

 

Source1

Source2

 

 

1)      내부 조인

 

 

2)      왼쪽 우선 외부 조인

 

3)      완전 외부 조인

 

 

 

반응형
반응형

병합

 

병합 변환은 두 개의 입력 데이터를 병합하는 변환입니다. 입력되는 데이터는 정렬된 형태이어야 하며, 병합 변환에서는 정렬된 키를 기준으로 데이터를 병합하여 정렬된 형태로 데이터를 출력합니다. 병합 변환은 UNION ALL 변환과 상당히 유사하지만, 다음과 같은 차이점이 있습니다.

 

Ÿ           두 개의 입력만 가능합니다.UNION ALL 변환은 다수의 입력을 지정할 수 있지만, 병합 변환은 두 개의 입력만 가능합니다. 만약, 여러 개의 입력을 이용하고자 한다면, UNION ALL 변환과 정렬 변환을 이용해야 합니다.

 

Ÿ           입력되는 데이터의 유형 및 길이 등과 같은 메타 데이터가 일치해야 합니다.입력 데이터의 데이터 유형이 일치해야 하는 점은 UNION ALL 변환도 마찬가지이지만, 데이터의 길이 등은 서로 다를 수 있습니다. 예를 들어, 하나의 입력은 DT_STR 10자리이고, 다른 하나의 입력은 DT_STR 30자리인 경우, UNION ALL 변환은 입력의 순서와는 상관없이 두 입력 데이터를 결합할 수 있으며, 출력되는 결과는 입력 데이터 유형 중 가장 큰 유형인 DT_STR 30자리가 됩니다. 하지만, 병합 변환의 경우에는 입력되는 데이터의 순서에 따라 변환 가능 여부가 결정됩니다. 병합의 첫 번째 입력이 두 번째 입력보다 더 큰 유형인 경우에만 변환이 가능하며, 출력 데이터는 첫 번째 입력 유형을 따릅니다. 첫 번째 입력이 DT_STR 30자리이고, 두 번째 입력이 DT_STR 10자리인 경우에는 변환이 가능하지만, 반대로 첫 번째 입력이 DT_STR 10자리이고, 두 번째 입력이 DT_STR 30자리인 경우에는 수행이 안됩니다.

 

Ÿ           입력되는 데이터는 반드시 정렬된 형태이어야 합니다.입력 데이터가 정렬되었다라는 속성을 가져야 합니다. 정렬 속성을 가진다는 것은 입력 데이터가 병합에 연결되기 전에 정렬 변환을 거쳐서 특정 열을 기준으로 정렬이 이루어지도록 하든지, 또는 입력 데이터의 고급 편집기의 출력 속성에서 강제로 정렬 속성을 지정하는 방법이 있습니다.



       입력 데이터가 정렬 변환을 거치면 데이터는 정렬 속성을 가지게 됩니다.

       데이터가 정렬된 것을 보장할 경우, 강제로 정렬된 속성을 지정할 수 있습니다. 위의 그림에서 MergeSource2에 대해 오른쪽 마우스를 클릭하여 나타나는 메뉴 중, 고급 편집기 표시(A)를 선택하여 고급 편집기를 엽니다.



/출력 속성 탭에서 원본 출력 부분을 클릭하면 오른쪽에 출력에 대한 속성 창이 나타납니다. 이 중에서, IsSorted의 속성값을 True로 변경합니다. 그런 다음, 출력 열 부분을 확장하여, 정렬로 설정할 열을 선택한 후, SortKeyPosition의 값을 0에서 1 또는 -1로 설정합니다. 1오름차순(ASC)으로 정렬되었다라는 것을 나타내며, -1내림차순(DESC)으로 정렬되었다라는 것을 나타냅니다.



위의 두 가지 설정을 거치면, 정렬 변환 없이도 입력 데이터는 정렬 속성을 가지게 되며, 직접 병합 변환에 연결할 수 있습니다. IsSorted 속성은 플랫 파일 원본뿐만 아니라, 다른 모든 원본에 대해서도 존재하는 속성입니다.

Ÿ           데이터가 결합되는 순서에 차이가 있습니다.UNION ALL 변환과 병합 변환은 입력 데이터를 하나로 합치는 기능은 동일합니다. 하지만, UNION ALL 변환은 첫 번째 입력 밑에 두 번째 입력 데이터를 덧붙이는 방식이며, 병합 변환은 두 입력에 대해 정렬 순위를 판단하여 출력하는 방식입니다.

   

 

만약 위의 그림에서와 같이 UNION ALL 변환 이후에 정렬을 수행하게 되면, 병합 변환을 수행한 결과와 동일한 결과를 얻을 수 있습니다. 상황에 따라서 UNION ALL 변환이 유리한지, 병합 변환이 유리한지 판단하여 사용해야 합니다. 만약 100만 건의 데이터 파일이 10개가 있다고 할 때, 100만 건의 데이터 10개를 각각 정렬한 후, 병합 변환을 거쳐 1000만 건의 정렬된 데이터를 얻는 것과, 100만 건의 데이터 파일 10개를 UNION ALL을 이용하여 1000만 건의 데이터로 만든 후, 이를 정렬하는 경우를 고려할 수 있습니다. 이 경우, 후자와 같이 1000만 건의 데이터를 한 번에 정렬하는 것 보다는 10개의 100만 건 데이터로 나누어서 정렬하는 것이 훨씬 더 우수한 성능을 낼 수 있습니다. 대신, 병합 변환을 9 (5 + 2 + 1+1) 수행해야 하는 부하는 고려해야 합니다.

 

 

<수정 사항 : 2006.09.29>
마지막에 병합 변환 횟수 8회에서 9회로 수정합니다...
반응형
반응형

열 가져오기, 열 내보내기

 

열 가져오기열 내보내기 변환은 BLOB(Binary Large Object) 형 데이터를 대상으로 수행하는 변환 작업입니다. 테이블에서 BLOB 데이터 형의 열을 분리한다든지, 반대로 별도로 존재하는 텍스트 파일이나 이미지 파일 등을 테이블 데이터로 합치는 경우에 사용할 수 있습니다.

 

 

 

열 가져오기

 

열 가져오기 변환은 SQL 2005 Beta 버전에서는 파일 추출(File Extractor)라는 이름이었는데, RTM 버전 이후로는 열 가져오기(Import Column)로 변경되었습니다.

 파일을 첨부 할 수 있는 게시판을 생각해 봅시다. 여기 SQLLeader.com에 있는 강좌나 다른 게시판들도 마찬가지입니다. 게시물에 포함된 첨부 파일이나 이미지 파일들은 일반적으로 테이블 내에 저장되지 않고, 별도의 위치에 저장됩니다. 테이블에는 해당 폴더의 물리적인 위치 정보만 가지고 있습니다.

 

 

 

하지만, 위와 같이 별도로 관리하지 않고, SQL에서 제공하는 text, image, varchar(max) 등과 같은 형태의 열에 해당 파일을 직접 저장시킬 수도 있습니다.

 

 

테이블 내에 이와 같은 방식으로 직접 저장시키는 경우, 데이터베이스 파일이 커지는 문제가 있긴 하지만 여러 장점들도 있습니다. 데이터베이스에 저장이 되기 때문에, 데이터베이스 수준의 보안 및 관리 기능을 제공할 수 있으며, 해당 파일이 있는 위치를 읽어와서 조회하는 대신 바로 데이터를 직접 접근할 수 있기 때문에 성능적인 측면에서도 더 나을 수도 있습니다.

 

열 가져오기 변환은 이와 같은 상황을 수행할 수 있는 변환 작업입니다. 예를 들어, 파일에서 데이터를 읽어 데이터 흐름에 추가할 수 있습니다. 데이터 흐름에 추가한 후, 테이블이나 파일 등에 직접 저장할 수도 있으며, 기타 다른 변환 작업을 계속 수행할 수도 있습니다.

 

 

다른 변환 작업들과는 달리 열 가져오기 변환은 고급 속성 편집기만을 제공합니다. (일반 편집기 및 고급 편집기에 대해서는 변환 뒷 부분에서 추가 설명) 입력 열 탭에서는 데이터 위치를 저장하고 있는 열을 지정합니다. 위의 그림에서, File 이라는 열에는 열 가져오기를 수행할 대상인 파일 정보가 들어있습니다.

 

 

 

/출력 속성 탭에서는 읽어 들인 데이터 파일을 출력할 열을 지정해줘야 합니다. /출력(I) 부분에서 열 가져오기 입력 부분은 파일 정보를 가지고 있는 열에 대한 속성입니다. 열 가져오기 출력출력 열 부분에서 아래의 열 추가(C) 버튼을 이용하여 읽어온 데이터를 출력할 열을 설정해 줘야 합니다. 위의 그림에서는 열 이름을 ReadData, 데이터 유형을 텍스트 스트림(DT_TEXT)으로 지정하였습니다. 그런 후, 열 가져오기 입력의 입력 열을 확장한 후, 파일명을 가지고 있는 열에 대한 속성 중 FileDataColumnID의 속성값에 출력에서 추가한 열의 ID값(위의 그림에서는 166)을 입력해 줘야 합니다. 이것은 입력받은 열 정보에 대한 출력 열을 지정해주는 작업입니다.

 

 

기본적으로 열 가져오기 변환에서 오류 출력을 설정해 주지 않은 상태에서 가져올 파일이 없는 경우에는 작업이 실패하게 됩니다. 예를 들어, 파일 위치 정보를 가지고 있는 열에서 d:\files\img1.jpg 라는 값이지만, 해당 파일이 존재하지 않는 경우에는 변환 작업은 실패하게 됩니다. 이 경우, 오류 출력 대상을 지정한 후 열 가져오기 변환의 오류 출력선(붉은 선)을 연결해 주면 오류 처리 방법을 설정할 수 있습니다.

 

 

[참고] 열 가져오기 변환에서 오류 출력을 변경할 수 있는 메뉴가 따로 없습니다. 오류 출력을 설정하려면 오류 대상을 먼저 만든 후, 열 가져오기 변환의 붉은 선을 연결시키면 오류 출력 구성을 설정할 수 있는 메뉴가 나타납니다. 만약, 설정한 오류 출력 구성을 변경하기 위해서는 기존 오류 출력을 제거한 후 다시 연결해야 하며, 설정해 놓은 오류 출력 구성에 대한 사항을 확인할 수도 없습니다.

열 내보내기 변환의 경우에는 변환 편집기 내에 오류 출력 탭이 별도로 존재하기 때문에, 해당 부분에서 설정 및 수정, 확인할 수 있습니다. 이는 앞 부분에서 언급한 것과 같이 열 가져오기 변환의 기본 편집기는 고급 속성 편집기인 반면, 열 내보내기의 기본 편집기는 일반 편집기이기 때문입니다.

 

 

 

 

 

열 내보내기

 

열 내보내기 변환은 열 가져오기 변환과 반대되는 변환 작업입니다. 입력되는 데이터 중, 특정 열의 정보를 별도의 파일로 출력시킵니다. 다른 변환 작업과는 달리, 데이터를 저장할 대상 개체를 별도로 지정하는 대신 변환 작업 내의 속성 창에서 직접 설정하게 됩니다.

열을 내보낼 수 있는 데이터 형식은 텍스트 스트림(DT_TEXT), 유니코드 텍스트 스트림(DT_NTEXT), 이미지(DT_IMAGE)형만 가능하며, 파일에 저장할 때의 세부 옵션을 지정할 수 있습니다.

 

 

Ÿ           추출 열 추출할 데이터가 있는 열을 지정합니다. 입력 데이터 중, 텍스트 형이나 이미지 형의 열이 자동으로 리스트 됩니다.

Ÿ           파일 경로 열 추출 열의 데이터가 저장될 파일 경로를 포함하고 있는 열을 지정합니다.

Ÿ           추가 허용 작업 수행 시, 대상 파일이 이미 있는 경우, 추가로 쓸 것인지를 설정합니다.

Ÿ           강제 자름 데이터를 쓰기 전에 기존의 파일 내용을 삭제하고 새로 쓸 것인지를 설정합니다.

Ÿ           바이트 순서 표시 쓰기 – BOM(Byte Order Mark : 바이트 순서 표시 정보)를 파일에 쓸 지를 설정합니다. 데이터 형식이 유니코드 텍스트 스트림(DT_NTEXT)이며, 기존 파일에 추가되지 않는 경우에만 BOM을 쓸 수 있습니다.

 

[참고] BOM(Byte Order Mark) – 바이트 순서 표시

유니코드 텍스트 파일이 Little-Endian인지 Big-Endian인지 아니면 UTF-8 인지를 쉽게 알 수 있도록 하기 위해, 유니코드 파일의 시작 부분에 2~3바이트 정도의 문자열을 추가합니다. 이 문자열은 보이지는 않으며, 헥사 에디터(Hex Editor)를 이용해서 확인할 수 있습니다.

 

             Little-Endian BOM        : FF FE

             Big-Endian BOM          : FE FF

             UTF-8 BOM                  : EF BB BF 또는  BOM 정보가 없음

 

 

 

 

따라하기

 

열 가져오기 변환을 이용한 간단한 예제를 수행해 보겠습니다. 우선 예제를 위해 원본 파일 및 데이터 파일들이 필요합니다. 다음 단계에 따라 원본 파일을 생성하기 바랍니다.

 

[원본 파일 및 데이터 파일 생성 부분]

1.        메모장을 이용하여 다음과 같은 파일을 생성합니다. 본 예제에서는 D:\SSIS_Demo\ 폴더를 대상 폴더로 설명하겠습니다.

A.        D:\SSIS_Demo\Col_In_Demo.txt



B.       D:\SSIS_Demo\Demo_Data1.txt

        

C.       B와 같은 형태로 Demo_Data5.txt 파일까지 총 5개의 데이터 파일을 만듭니다.

 

[열 가져오기 변환 설정]

2.        빈 패키지 파일 하나를 추가한 후, 데이터 흐름 작업을 추가합니다.

3.        연결 관리자에서 새 플롯 파일 연결을 이용하여 플랫 파일 연결을 하나 추가합니다.

      

4.        탭과 고급 탭을 클릭한 후, 확인을 눌러 연결 관리자 편집기를 닫습니다.

5.        데이터 흐름 영역에 플랫 파일 원본을 추가한 후, 플랫 파일 원본 편집기 내의 연결 관리자에 3에서 추가한 플랫 파일 연결을 지정합니다.



6.        도구 상자에서 열 가져오기 변환을 추가한 후, 5에서 추가한 원본의 녹색 선을 연결합니다.



7.        열 가져오기 변환을 더블 클릭하여 고급 열 가져오기 변환 편집기를 연 후, 입력 열 탭에서 열 1을 체크합니다. 파일 경로를 포함하고 있는 열을 선택하는 작업입니다.



8.        /출력 속성 탭에서 열 가져오기 출력 부분을 확장한 후, 출력 열을 선택한 상태에서 아래 부분에 있는 열 추가(C) 버튼을 클릭하여 출력할 열을 지정합니다. 추가한 열 이름을 ReadData로 변경하고, 오른쪽의 속성 부분에서 DataType텍스트 스트림(DT_TEXT)으로 변경합니다. 이 후, 공용 속성 부분에 있는 ID 값을 확인합니다. 본 예에서는 42입니다.



9.        왼쪽 부분의 /출력(I) 부분에서 열 가져오기 입력을 확장한 후, 입력 열 아래에 있는 1을 선택합니다. 오른쪽의 속성 부분에서 사용자 지정 속성 부분에 있는 FileDataColumnID의 값에 8에서 확인한 출력 열의 ID값을 입력합니다. 이 작업은 입력 데이터와 출력 열을 연결해 주는 작업입니다.



10.    확인을 눌러 편집기를 닫습니다.

11.    데이터 흐름 영역에 플랫 파일 대상을 하나 추가한 후, 열 가져오기 변환의 녹색 선을 연결합니다.



12.    플랫 파일 대상을 더블 클릭하여 편집기를 연 후, 새로 만들기(N)를 클릭하여 결과를 저장할 플랫 파일 연결을 추가한 후, 매핑 탭에서 각 열에 대한 연결을 설정합니다. 본 예제에서는 결과 파일을 D:\SSIS_Demo\Col_In_Merge.txt로 지정하였습니다.





13.    패키지를 실행하여 결과 파일을 확인합니다.

 
 
반응형
반응형

열 복사, 데이터 변환, 파생 열, 문자표

 

멀티 캐스트 변환이 입력되는 데이터 전체에 대한 복사 작업이라면, 열 복사 변환은 입력되는 데이터의 열에 대해서 복사를 하는 변환입니다. 파생 열이나 데이터 변환, 문자표 변환 역시, 입력 데이터에 대해 열 수준의 변경 작업을 수행합니다.

 

입력되는 열에 대한 변경 작업으로써 비슷한 유형이지만 다음과 같은 차이점이 있습니다.

 

변환 명

작업 내용

열 복사

입력 데이터 중, 특정 열을 동일하게 복사

데이터 변환

특정 열에 대하여 데이터 형식, 길이, 자릿수, 코드 페이지 등의 속성을 변경

파생 열

특정 열 또는 여러 열을 이용한 계산된 열이나 문자열 함수 등을 이용한 열을 추가

문자표

특정 열에 대하여 대/소문자 변환, 바이트 반전 등과 같은 특수 연산 수행

 

 

 

열 복사

 

가장 단순한 열 수준의 변환 작업입니다. 입력 데이터 중, 특정 열을 단순히 다른 이름으로 복사해서 출력하는 변환입니다. 만약 원본에서 데이터를 읽어 들인 후, 여러 변환 과정을 수행 할 때, 원본 데이터의 복사본을 그대로 유지하고 싶은 경우에 사용할 수 있습니다.

 

 

 

 

데이터 변환

 

 입력 데이터 중, 특정 열에 대한 데이터 속성을 변경할 때 사용되는 변환입니다.

 

 

상단의 사용 가능한 입력 열에서 변경을 원하는 열을 선택한 후, 아래의 속성 변경 부분에서 변경 설정을 하면 됩니다.

Ÿ           출력 별칭 변환 후, 출력되는 열의 이름을 정합니다. 기존 열의 대체 기능은 없으며, 새로운 열로 추가만 됩니다.

Ÿ           데이터 형식 변경할 데이터의 유형을 설정합니다.

Ÿ           길이 데이터 형식이 문자열[DT_STR], 유니코드 문자열[DT_WSTR], 바이트 스트림[DT_BYTES]인 경우, 문자열의 길이를 설정합니다.

Ÿ           전체 자릿수, 소수 자릿수 데이터 형식이 10진수[DT_DECIMAL], 숫자[DT_NUMERIC]인 경우, 숫자 데이터의 전체 자릿수 및 소수 자릿수를 설정합니다.

Ÿ           코드 페이지 데이터 형식이 문자열[DT_STR], 유니코드 문자열[DT_WSTR], 바이트 스트림[DT_BYTES], 텍스트 스트림[DT_TEXT]인 경우, 데이터의 코드 페이지를 설정합니다.

 

하단의 오류 출력 버튼을 클릭하여, 오류 발생 시 처리할 방법을 설정할 수 있습니다. 예를 들어, 데이터 형식을 숫자로 설정하였지만, 원본 데이터가 “abc”와 같은 문자 데이터가 들어오는 경우, 데이터 변환 작업은 오류를 발생하게 됩니다. 이 경우, 오류 데이터를 다른 경로로 출력하도록 하거나, 오류 데이터를 무시하도록 하거나, 또는 변환 작업을 실패로 처리하도록 할 수 있습니다.

 

 

 

파생 열

 

SQL에서 계산된 열(Calculated Column)과 같이 기존의 열을 이용하여 새로운 열을 정의하는 변환입니다. 예를 들어, 원본 데이터가 A, B 열로 구성이 된 경우, A+B로 정의되는 새로운 열 C를 추가하도록 지정할 때 이용할 수 있습니다.

 

 

파생 열 변환데이터 변환과 거의 유사합니다. 하지만, 새로운 열을 추가하는 대신 기존 열을 대체하도록 하는 바꾸기 변수명으로 설정을 할 수 있습니다. 속성 부분에서 해당 열에 대한 정의를 할 수 있습니다. 식은 단순히 LEFT, RIGHT 등과 같은 문자열 함수뿐만 아니라, 편집기의 오른쪽에 있는 다양한 함수들을 이용하여 생성할 수 있으며, 열 외에도 SSIS의 사용자 변수를 식에 포함시킬 수 있습니다.

 길이, 전체 자릿수, 소수 자릿수, 코드 페이지 등과 같은 속성은 데이터 변환 부분과 동일합니다.

 

 

 

문자표

 

문자표 변환은 대문자를 소문자로 변환한다든지, 전자 문자를 반자 문자로 변환하는 것과 같은 문자 데이터에 대한 특수한 변환 작업을 수행할 때 사용되는 변환 개체입니다.

 

 

대상 속성을 내부 변경으로 설정하면 기존 열을 대체하게 되며, 새 열로 설정하면, 변환을 적용한 새로운 열을 추가하게 됩니다.

수행할 수 있는 연산 작업은 다음과 같습니다.

Ÿ           소문자 입력 열의 데이터를 모두 소문자로 변경합니다.

Ÿ           대문자 입력 열의 데이터를 모두 대문자로 변경합니다.

Ÿ           바이트 반전 바이트의 순서를 반대로 바꿉니다.

Ÿ           히라가나 입력 열의 데이터가 일본어인 경우 모두 히라가나로 변경합니다.

Ÿ           가타카나 입력 열의 데이터가 일본어인 경우 모두 가타카나로 변경합니다.

Ÿ           반자 전자 문자를 반자로 변경합니다.

Ÿ           전자 반자 문자를 전자로 변경합니다.

Ÿ           대소문자 구분 기능 /소문자의 구분 기능을 적용합니다.

Ÿ           중국어 간체 입력 열의 데이터가 중국어인 경우 모두 간체로 변경합니다.

Ÿ           중국어 번체 입력 열의 데이터가 중국어인 경우 모두 번체로 변경합니다.

Ÿ            

연산 작업들은 동시에 여러 개를 설정할 수 있습니다. 예를 들어 소문자와 반자, 바이트 반전 옵션을 설정할 수 있습니다. 하지만, 소문자와 대문자, 반자와 전자, 히라가나와 가타카나 등과 같이 서로 상반되는 옵션은 동시에 설정할 수는 없습니다.

 

 

반응형
반응형

멀티캐스트, 조건부 분할 변환

 

멀티캐스트조건부 분할 변환에 대해 살펴보기 전에, 다음의 두 경우를 먼저 생각해 보도록 하겠습니다.

 

1.        하나의 원본 데이터에서 읽은 데이터를 여러 대상에 저장하는 경우
 
예를 들어, Source라는 테이블의 데이터를 10개의 서로 다른 서버에 있는 대상 테이블에 전송하는 작업을 고려해 봅시다. SQL 에서는 원본 대 대상의 연결은 1:1입니다. , 위와 같은 작업을 수행하기 위해서는 원본에서 데이터를 10번 읽어야 했습니다. SQL 2005 SSIS에서는 멀티캐스트 변환을 이용하여 이러한 작업을 단순화 시킬 수 있습니다. 원본에서 읽는 작업은 한 번만 수행하는 대신 여러 대상으로 전송할 수 있습니다. 이러한 점은 원본 데이터를 반복해서 읽어오는 I/O 부하를 줄일 수 있습니다.

2.        원본에서 데이터를 읽어온 후, 조건에 따라 대상을 달리하는 경우
 
원본의 데이터에 따라 대상을 달리 해야 하는 경우도 위의 경우와 비슷합니다. 예를 들어, 회원 데이터와 같은 원본 데이터에서 남/녀 성별에 따라 서로 다른 두 테이블로 구분 짓는 경우를 고려해봅시다. 우선, 원본 데이터에서 성별이 남자인 데이터를 검색하여 저장하고, 다시 여자인 데이터를 검색하여 다른 테이블에 저장합니다. 이 경우도 역시 동일 데이터에 대해 두 번 읽어오는 작업을 수행해야 합니다.  SSIS조건부 분할 변환을 이용할 경우, 입력 데이터에 대해 조건 별로 대상을 달리 지정하여 분기하는 작업을 수행할 수 있습니다.

 

 

 

멀티캐스트

 

 멀티캐스트 변환은 입력 데이터를 그대로 여러 출력으로 내보내는 작업을 수행합니다. 데이터 가공이나 유형 변환 등의 작업은 수행하지 않으며, 단순히 데이터를 여러 출력으로 보내는 역할만 수행합니다. 하나의 원본을 지정한 후, 여러 경로로 출력을 만들 수 있으며, 오류 출력은 없습니다.

 

 

 

위의 그림에서와 같이, 원본 데이터의 모든 데이터를 대상 1, 대상 2, 대상 3으로 모두 동일하게 보내게 됩니다.

 

 

 

조건부 분할

 

멀티캐스트 변환과는 달리 입력되는 데이터에 대해 조건에 따라 서로 다른 출력 경로로 데이터를 구분해서 내보내는 변환입니다.

 

 

 

위의 경우, 입력되는 데이터 중, seq열의 값이 3보다 작은 경우 [사례 1]이라는 출력 명으로 출력되며, 4에서 6 사이인 경우에는 [사례 2]라는 출력으로 데이터가 출력됩니다. 이 조건을 만족하지 않는 데이터들은 기본 출력인 [조건부 분할 기본 출력]으로 데이터가 출력됩니다. SQL 쿼리의 CASE 구문이나 프로그램 언어에서 SELECT 문 등에서와 같이, 데이터가 상위 조건(여기서는 높은 순서)에 일치하면, 해당 경로로 출력이 되며, 다른 경로로는 출력하지 못합니다. 예를 들어 위의 경우, [사례 2]의 조건을 실수로 seq>=3 && seq<=6으로 잘못 입력하였다 하더라도 seq3 인 데이터는 [사례 1]의 경로에서 먼저 처리되기 때문에, [사례 2]의 출력으로는 출력되지 않습니다. 기본 출력 이름(D) SQL 쿼리에서 CASE 구문의 ELSE와 같은 부분이며, 데이터가 윗부분의 조건에 모두 맞지 않을 경우의 출력을 나타냅니다. 만약 seq 7 이상인 경우, 상위의 조건들을 모두 만족하지 않기 때문에 기본 출력인 [조건부 분할 기본 출력]으로 출력됩니다.

 

조건부 분할 변환은 SQL 쿼리의 CASE 문과 같은 데이터 분류 기능뿐만 아니라, SELECT문의 WHERE 절과 같은 조건 기능을 구현할 때에도 사용할 수 있습니다. 예를 들어 텍스트 형태의 웹 로그 데이터가 입력 데이터인 경우, URL 주소의 확장자가 .htm 이나 .asp 또는 .aspx 등과 같은 데이터만 추출하고 싶으며, .gif .jpg, .ico 등과 같은 이미지 관련 로그 데이터를 걸러내고 싶은 경우, 조건 절에
             RIGHT(url, 3) == “gif”
등과 같은 형식으로 제거할 확장자를 이용한 조건을 입력하고, 출력은 [기본 출력]만 사용하도록 하는 식으로 구현할 수 있습니다.

 

 

 

반응형
반응형

감사

 

감사 변환은 패키지가 실행 될 때의 환경이나 상황에 대한 정보를 포함할 수 있는 변환 개체입니다. 입력 데이터에 데이터 처리 작업을 수행하는 시간이나, 컴퓨터의 이름, 패키지의 GUID, 버전 등의 부가 정보를 추가하여 출력하도록 설정할 수 있습니다. 예를 들어, A, B, C 라는 세 개의 열로 이루어진 데이터 입력 부분에, 수행 시간 정보를 나타내는 열 D를 추가하여 출력하도록 설정할 수 있습니다.

 

감사 변환은 하나의 입력과 하나의 출력을 가지며, 오류 출력은 없습니다.

 

 

             감사 유형

Ÿ           실행 인스턴스 GUID – 패키지가 수행할 때의 GUID값이며, 이 값은 매번 수행될 때 마다 달라집니다.

Ÿ           패키지 ID – 수행되는 패키지의 ID 정보입니다. 패키지 ID는 제어 흐름 영역에서 속성 창의 ID 부분에서 확인할 수 있습니다.

Ÿ           패키지 이름 수행되는 패키지의 이름 정보입니다.

Ÿ           버전 ID – 패키지의 버전 정보입니다. 패키지 버전은 패키지 내의 변경 사항이 발생된 후, 저장하게 되면 변경됩니다. 만약 패키지 내에 아무런 변경이 없는 경우에는 동일한 값을 유지됩니다.

Ÿ           실행 시작 시간 패키지가 수행되기 시작한 시간을 나타냅니다. 여기서의 시작 시간은 패키지의 시작 시간이며, 감사 단계가 포함된 변환 작업의 시작 시간은 아닙니다.

Ÿ           컴퓨터 이름 수행되는 컴퓨터의 이름 정보입니다.

Ÿ           사용자 이름 패키지를 수행하는 사용자 이름 정보입니다.

Ÿ           작업 이름 감사 변환이 포함되어 있는 데이터 흐름 작업의 이름 정보입니다.

Ÿ           작업 ID – 감사 변환이 포함되어 있는 데이터 흐름의 ID 정보입니다. 이 정보는 제어 흐름 영역에서 해당 데이터 흐름 작업을 클릭한 후, 속성 창의 ID 부분에서 확인할 수 있습니다.

 

감사 변환은 데이터가 입력될 때의 상황에 대한 정보를 같이 포함시킬 수 있는 기능으로써, 잘못된 데이터 처리나 데이터에 대한 버전 관리 등을 수행하는데 유용하게 사용할 수 있는 변환 개체입니다.

 

 

반응형
반응형

UNION ALL, 정렬, 집계 변환

 

SSIS에는 SQL에서 사용되는 연산과 유사한 작업들이 많이 존재합니다. 대표적인 예가 UNION ALL, 정렬, 집계, 조인 등입니다. SQL 쿼리는 테이블에 있는 데이터를 대상으로 SQL 엔진에서 이러한 작업들이 수행되지만, SSIS는 테이블뿐만 아니라, 다양한 형태의 원본 데이터에 대해서도 이러한 작업을 수행할 수 있습니다. 예를 들어, 여러 개의 텍스트 파일 및 엑셀 파일에서 읽은 데이터를 SQL 사용 없이 UNION ALL 변환 작업으로 하나의 파일로 합칠 수도 있으며, 특정 열로 정렬시킨 후 출력할 수도 있으며, COUNT SUM등과 같은 집계 연산 작업도 가능합니다. 이러한 작업들은 모두 파이프 라인이라는 SSIS 엔진의 메모리 영역에서 수행이 되기 때문에 SQL 서버의 임시 테이블에 데이터를 넣고 여러 작업들을 수행한 후 다시 읽어오는 부가적인 I/O 작업 없이 직접 처리가 가능합니다.

 

 

 

UNION ALL 변환

 

UNION ALL 변환은 여러 개의 입력 데이터를 하나로 결합하는 변환입니다. 다수의 입력에 대해 하나의 출력을 제공합니다.

 

 

 

위의 그림에서, UNION ALL 입력 1의 경우, 구매수량이라는 출력 열에 해당하는 데이터가 없는 경우, <무시>로 설정을 하면 해당 열은 NULL로 처리됩니다. 고객명이나 제품명과 같이 서로 다른 입력에 대해 동일한 출력으로 지정하도록 할 경우, 각 입력 데이터의 데이터 형식은 동일해야 합니다.

 

 

 

정렬

 

입력되는 데이터를 오름차순이나 내림차순으로 정렬한 후, 출력하는 변환입니다. SQL 쿼리에서 여러 열에 대해 정렬을 수행하고, 각 열 별로 정렬 형태를 지정하는 것과 마찬가지로, 정렬 변환에서도 여러 열에 대해서 정렬이 가능하며, 각 열 별로 정렬 옵션을 지정할 수 있습니다. 정렬 옵션은 오름차순이나 내림차순 설정뿐만 아니라, /소문자 무시, 문자 너비 무시 등과 같은 비교 플래그 설정을 포함합니다. 다른 변환 작업과 마찬가지로 출력 열의 이름을 변경할 수도 있습니다.

 

 

Ÿ           비교 플래그

ú           /소문자 무시 대소문자 구분 여부를 설정합니다. 이 옵션을 설정하게 되면 “ABC”“abc”를 동일하게 인식합니다.

ú           가나 형식 무시 두 가지 유형의 일본어 가나 문자인 히라가나와 가타가나에 대한 구분 여부를 설정합니다.

ú           비공백 문자 무시 공백 문자와 분음 기호의 구분 여부를 설정합니다. 이 옵션을 설정하게 되면 "å" "a"를 동일하게 인식합니다.

ú           문자 너비 무시 싱글바이트 문자와 더블바이트 문자의 구분 여부를 설정합니다. 이 옵션을 설정하게 되면 “A”를 동일하게 인식합니다.

ú           기호 무시 글자 문자와 공백 문자, 문장 부호, 통화 기호 및 수학 기호와 같은 기호에 대한 구분 여부를 설정합니다. 이 옵션을 설정하게 되면 “ ABC”“*ABC”, “ABC”를 모두 동일하게 인식합니다.

ú           문장 부호를 기호로 정렬 영문자 또는 숫자 앞에 하이픈과 따옴표(‘)를 제외한 모든 문장 부호에 대한 구분 여부를 설정합니다. 이 옵션을 설정하게 되면, “.ABC”“ABC” 앞에 정렬됩니다. , 데이터의 코드가 949(한글)인 경우에는 특별히 이 옵션을 설정하지 않아도 문장 부호를 기호로 정렬하게 됩니다.

 

 

 

집계

 

입력되는 데이터에 대해 SUM이나 AVERAGE, COUNT 등과 같은 집계 연산을 수행하여 결과를 출력하는 변환입니다. SQL 쿼리에서 GROUP BY 구문과 수행 방법이 비슷하며 집계를 수행할 열과 집계 연산을 지정합니다. 다른 변환 작업과는 달리 고급 설정 기능이 많이 포함되어 있습니다. 이는 집계 작업을 수행할 때 단순히 집계와 관련된 기능뿐만 아니라 배율이나 키 수 등과 같은 성능과 관련된 설정이 많이 포함되어 있기 때문입니다.

 

 

집계

Ÿ           연산

ú           Group By – 집계 작업을 수행하기 위한 그룹 열입니다. 예를 들어 고객명과 제품명으로 집계를 수행한다면, 고객명, 제품명이 그룹 열이 됩니다.

ú           Sum – 열의 값에 대한 합계를 계산합니다. 열의 값이 숫자형인 경우에만 설정할 수 있습니다.

ú           Average – 열의 값에 대한 평균을 계산합니다. 열의 값이 숫자형인 경우에만 설정할 수 있습니다.

ú           Count – 그룹 열에 대한 열의 항목 개수를 계산합니다.

ú           Distinct Count – 그룹 열에 대한 열 중 NULL을 제외한 항목의 고유한 개수를 계산합니다.

ú           Minimum – 열의 값 중 최소값을 반환합니다.

ú           Maximum – 열의 값 중 최대값을 반환합니다.

 

Ÿ           비교 플래그 정렬 변환의 비교 플래그 부분을 참고하시기 바랍니다.

 

Ÿ           고유 수 배율 연산이 Distinct Count 일 때에 설정할 수 있습니다. 고유한 키의 대략적인 수준을 지정해 주는 부분이며, 이러한 설정은 Distinct Count 연산 수행 시 고유 수의 정도에 따라 메모리를 미리 확보해 둠으로써 성능을 향상시킬 수 있는 설정입니다. 기본 값은 Unspecified 입니다.
       Unspecified –
고유 수 배율 속성을 사용하지 않습니다.
       Low –
500,000개 정도의 고유 수 정도인 경우
       Medium –
5,000,000개 정도의 고유 수 정도인 경우
       High –
25,000,000개 정도의 고유 수 정도인 경우

 

 

Ÿ           고유 키 수 고유 수 배율은 대략적인 고유 수 값을 지정하는 것입니다. 이에 비해 고유 키 수는 정확한 고유 수 값을 아는 경우 설정해주는 부분입니다. 예를 들어, Distinct Count를 수행해서 나올 수 있는 수치가 9,500,000 정도 된다라는 것을 미리 알고 있다면, 고유 키 수의 속성값에 이 추정치를 적어줌으로써 집계 연산의 작업에서 필요한 메모리를 미리 확보할 수 있도록 설정할 수 있습니다. 고유 수 배율고유 키 수를 동시에 지정한 경우, 고유 키 수의 속성을 적용하게 됩니다.

 

집계 탭에서 상단의 고급(A) 버튼을 클릭하면 출력 경로에 대한 설정을 할 수 있는 부분이 나타납니다. 집계 연산은 하나의 입력에 대해 여러 개의 여러 개의 집계를 만들 수 있으며, 각각의 집계 작업이 출력이 됩니다. 예를 들어, 고객명, 제품명, 조회수, 구매수량, 구매금액이 입력 데이터에 대해, 고객명과 제품명을 기준으로 값들의 합계를 구하는 연산 작업(집계 출력 1), 고객명에 대한 고유한 제품명 수(Distinct Count)를 계산하는 집계 작업(집계 출력 2)을 수행해야 한다면, 별도의 집계 변환을 추가하지 않고도, 하나의 집계 변환에서 두 가지 형태의 집계 작업을 수행할 수 있습니다.

 

 

Ÿ           집계 이름 출력의 이름을 지정합니다.

Ÿ           Group By 집계 작업의 그룹 열입니다.

Ÿ           키 소수 자릿수 ([참고] “키 배율로 번역되어야 하는 것인데, 프로그램 상에서는 키 소수 자릿수로 번역되어 있습니다.) 고유 수 배율과 비슷한 옵션을 가지고 있으며, 키 열로 수행되는 Group By 연산 결과에 대한 추정치를 설정합니다. 예를 들어 Group By 연산에 의해 생성되는 결과 행 수가 대략 6,500,000개 정도가 된다면, 키 소수 자릿수 속성을 Medium으로 설정해 줌으로써 좀 더 최적화된 성능을 기대할 수 있습니다.

Ÿ           정확한 Group By 연산 결과의 수 또는 대략적인 수를 아는 경우, 입력합니다. 키 소수 자릿수 설정과 마찬가지로 이 값을 설정하는 경우, 집계 연산에 필요한 메모리를 추정하여 미리 확보해 둠으로써 성능을 향상시킬 수 있습니다. 키 소수 자릿수 값이 모두 설정되어 있는 경우, 값의 설정을 적용하게 됩니다.

 

 

고급

 

고급 탭에서도 역시 키 배율, 키 수, 고유 수 배율, 고유 키 수를 지정할 수 있습니다. 하지만, 이러한 속성을 고급 탭에서 지정하게 되면 변환 작업 전체에 대해 설정을 지정하게 됩니다. , 고급 탭의 설정은 집계 변환에 포함된 모든 집계 작업 전체에 대한 설정이고, 집계 탭의 고급 버튼을 눌러 나오는 화면에서 지정하는 것은 각 집계 작업에 대한 설정이며. 집계 탭 하단에서 지정하는 것은 출력에 포함된 각 열에 대해 지정하는 것입니다.

고급 탭에서는 자동 확장 비율이라는 속성이 있습니다. 이는 집계 작업을 위한 메모리 사용에 대한 고급 설정으로, 집계 작업 수행 중 추가로 메모리가 필요할 때 늘릴 비율을 지정하는 것입니다. 기본값은 25% 입니다.

 

 

 

 

 

따라하기 [SSIS 실습3] UNION 집계 변환 만들기를 참고하시기 바랍니다

 

반응형
반응형


OLE DB 명령

 

OLE DB 명령은 입력되는 데이터의 각 행 별로 SQL 작업을 수행하는 변환 작업입니다. SQL에서의 커서(Cursor)와 유사한 방식입니다. 예를 들어, 우편번호 1000개가 입력 데이터인 경우, 각 우편번호에 대해 상세 주소를 별도의 테이블에 저장하도록 하는 프로시저를 수행할 수 있습니다. 각 행 별로 수행될 SQL 쿼리에는 ? 로 표시되는 입력 매개 변수가 포함되며, 열 매핑에서 이 ? 에 대한 입력 데이터의 매핑 작업을 설정합니다.

 

SQL 쿼리에서 커서를 이용하여 데이터를 처리해야 하는 경우와 같이, 데이터 처리 프로세스에서도 커서 방식의 처리가 필요한 경우가 있습니다. 이전 버전의 경우, SQL 실행 작업에서 SQL 커서를 만들어 사용하거나 ActiveX 스크립트 작업에서 ADO 커서를 이용하여 처리하였지만, SQL 2005 SSIS에서는 OLE DB 명령 변환을 이용한다면 보다 효과적이며 편리하게 사용할 수 있습니다. OLE DB 명령은 변환 작업에 포함되지만, 입력되는 열과 출력되는 열이 동일하며 열이 추가되거나 변경되지는 않습니다.

 

 

 

OLE DB 명령의 편집기는 다음과 같이 4개의 탭으로 구성되어 있습니다.

 

Ÿ           연결 관리자 OLE DB 명령을 수행할 연결을 지정합니다. 이 연결은 연결 관리자OLE DB 연결을 사용합니다. 여기서 지정하는 연결은 OLE DB 명령 변환 작업에서 사용하는 연결을 지정하는 것이기 때문에, 반드시 입력되는 데이터와 동일한 연결일 필요는 없습니다. 또한, 원본에서 사용하는 OLE DB 연결을 그대로 사용할 수도 있습니다.

Ÿ           구성 요소 속성 각 행의 데이터로 수행할 SQL 명령을 설정합니다. SQL 명령 외에 Timeout , Code Page 등을 설정할 수 있으며, 변환 작업의 이름이나 설명을 변경할 수도 있습니다. SqlCommand에는 저장 프로시저 또는 Ad-Hoc 쿼리 형태로 설정하며, 쿼리에는 입력 매개 변수로 ? 를 지정합니다.
              
) exec sp_insertdata ?,?,?

Ÿ           열 매핑 SqlCommand의 매개 변수에 대해 입력 데이터의 열을 매핑 시킵니다. 사용 가능한 입력 열 부분이 입력되는 데이터의 열이며, 사용 가능한 대상 열 부분이 매개 변수를 나타냅니다. 매개 변수는 Ad-Hoc 쿼리인 경우, 차례대로 Param_0, Param_1, Param_2, … 등과 같은 형태로 나타나며, 저장 프로시저인 경우 프로시저의 입력 변수 명이 나타납니다.



Ÿ           /출력 속성 입력 열 및 출력 열에 대한 상세 속성을 조회하거나 데이터 유형을 변경하는 등의 변경 작업을 할 수 있습니다.

 

 

 

 

따라하기

 

AdventureWorks 데이터베이스에 있는 [Production].[Product] 테이블의 ProductID에 대해, [Prduction].[TransactionHistory] 테이블에서 해당 ProductID 개수 및 최근 OrderID를 구하여 별도의 테이블에 저장하는 예제를 구현해 봅니다.

 

1.        쿼리 분석기를 이용하여 다음과 같은 저장 프로시저 및 임시 테이블을 생성합니다.

USE AdventureWorks

GO

 

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TestResult]') AND type in (N'U'))

             DROP TABLE [dbo].[TestResult]

GO

CREATE TABLE [dbo].[TestResult]

(

             ProductID int NOT Null,

             OrderCount int Null,

             LastOrderID int Null

)

GO

 

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uspTestProc]') AND type in (N'P', N'PC'))

             DROP PROCEDURE [dbo].[uspTestProc]

GO

CREATE PROCEDURE [dbo].[uspTestProc]

             @ProductID int

AS

             INSERT [dbo].[TestResult](ProductID, OrderCount, LastOrderID)

             SELECT @ProductID, COUNT(*), MAX(ReferenceOrderID) FROM Production.TransactionHistory

             WHERE ProductID = @ProductID

GO

 

 

2.        빈 패키지 파일을 하나 추가한 후, 데이터 흐름 작업을 추가합니다.

3.        아래 부분에 있는 연결 관리자에서 AdventureWorks DB를 지정하는 OLE DB 연결을 생성합니다.

4.        데이터 흐름 영역에서 OLE DB 원본을 추가한 후, 3에서 추가한 연결을 데이터 원본 연결로 지정하고, [Production].[Product] 테이블을 선택합니다.



5.        도구 상자에서 OLE DB 명령 변환을 추가한 후, OLE DB 원본의 녹색 선을 연결합니다.



6.        OLE DB 명령을 더블 클릭하여 고급 OLE DB 명령 편집기를 연 후, 연결 관리자 탭에서 AdventureWorks에 대한 연결을 지정합니다.



7.        구성 요소 속성 탭에서 SqlCommand 속성에 다음과 같이 입력합니다.
         EXEC dbo.uspTestProc ?



8.        열 매핑 탭에서 사용 가능한 입력 열 ProductID사용 가능한 대상 열 @ProductID로 매핑 시킵니다. 만약, 실행시키는 쿼리가 저장 프로시저가 아닌 Ad-Hoc 쿼리인 경우, Param_0, Param_1,… 과 같은 형식으로 나타납니다.



9.        확인을 누른 후, 패키지를 수행합니다.



  

반응형
반응형

몇 일 동안 DataReader 대상을 이용할 수 있는 방법이 없을까 찾다가, 좋은 예를 찾았습니다. BOL에서는 레포팅 서비스 등에서 이용 가능하다고만 나와 있는데, PC에 레포팅 서비스 설치도 안되어 있어서, VB.net을 이용하는 방식으로 만들어 보았습니다..

(물론~!! 제가 100% 순수 창작한 것은 절대 아닙니다. MSDN 영문판에 2006년 4 14일자로 추가된 것을 좀 자세히 단계별로 나타낸 것일 뿐 입니다…^^)

VB.net 이 깔려있는 경우, 한 번 따라 해 보시기 바랍니다. 상당히 유용할 것 같은 기분이~~~

 

 

 

따라하기 – DataReader 대상 이용하기

 

DataReader 대상을 이용하여 구현된 SSIS 패키지를 VB.net 응용 프로그램에서 호출하는 간단한 예제입니다.

 

 [테스트 용 SSIS 패키지 작성 부분]

1.       DataReaderSample.dtsx 라는 이름의 빈 SSIS 패키지를 하나 추가합니다.

2.       도구 상자에서 데이터 흐름 작업을 하나 추가합니다.

3.       OLE DB 원본을 추가하고, localhost AdventureWorks DB를 지정하도록 설정합니다.
이 때, OLE DB 원본 편집기의 데이터 액세스 모드는 SQL 명령으로 지정합니다.

4.       OLE DB 원본 편집기의 SQL 명령 텍스트에 다음과 같은 쿼리를 입력합니다.
SELECT * FROM Sales.vIndividualCustomer WHERE CountryRegionName = ?



5.       오른쪽에 있는 매개 변수(P) 버튼을 누른 후, 변수 부분에서 <새 변수..>를 클릭합니다.



6.       변수 추가 창에서 네임스페이스(S)DtsClient로 입력하고, 이름(N)Country로 입력합니다.



7.       확인을 눌러 OLE DB 원본 편집기를 닫습니다.

8.       데이터 흐름 변환에서 집계 변환 작업을 추가한 후, OLE DB 원본의 녹색 선을 연결합니다.



9.       집계 변환 편집기를 연 후, 사용 가능한 입력 열(*)로 선택합니다.




10.   데이터 흐름 대상에서 DataReader 대상을 추가하고 집계 변환 작업의 녹색 선을 연결합니다. 그런 후, DataReader 대상의 이름을 DataReaderDest로 변경합니다.



11.   DataReaderDest를 더블 클릭하여 고급 DataReaderDest 편집기를 연 후, 입력 열 탭에서 Count all을 선택하고, 출력 별칭 NO로 변경합니다.



12.   이 패키지를 D:\DataReaderSample.dtsx로 저장합니다.

 

 

[테스트 용 VB.net 어플리케이션 작성 부분]

 ADO.NET을 이용하는 어플리케이션이나 서비스는 여러 가지가 있을 수 있지만, 여기서는 VB.net을 이용한 어플리케이션을 이용하여 작성해 보겠습니다.

 

13.   Microsoft Visual Studio 에서 Visual Basic / Window 응용 프로그램 프로젝트를 하나 엽니다.



14.   상단 메뉴 중, 프로젝트(P) à 참조 추가(R).. 을 선택하여 참조 추가 창을 연 후, 찾아보기 탭에서 다음을 추가합니다.
%ProgramFiles%\Microsoft SQL Server\90\DTS\Binn
에서
Microsoft.SqlServer.Dts.DtsClient.dll
를 선택



15.   Form1 에 텍스트 상자 두 개를 추가하고, 하나는 txtCountry, 다른 하나는 txtResults 로 이름을 변경합니다. 또한 버튼을 하나 추가한 후, 이름을 btnResult 로 변경합니다.



16.   Button1의 코드 부분에 다음과 같이 추가합니다.

 

Imports System.Data

Imports Microsoft.SqlServer.Dts.DtsClient

 

Public Class Form1

 

    Private Sub btnResult_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResult.Click

 

        Dim dtexecArgs As String

        Dim dataReaderName As String

        Dim countryName As String

 

        Dim dtsConnection As DtsConnection

        Dim dtsCommand As DtsCommand

        Dim dtsDataReader As IDataReader

        Dim dtsParameter As DtsDataParameter

 

        Windows.Forms.Cursor.Current = Cursors.WaitCursor

 

        dtexecArgs = "/FILE ""D:\DataReaderSample.dtsx"""

        dataReaderName = "DataReaderDest"

        countryName = txtCountry.Text

 

 

        dtsConnection = New DtsConnection()

        With dtsConnection

            .ConnectionString = dtexecArgs

            .Open()

        End With

 

        dtsCommand = New DtsCommand(dtsConnection)

        dtsCommand.CommandText = dataReaderName

 

        dtsParameter = New DtsDataParameter("Country", DbType.String)

        dtsParameter.Direction = ParameterDirection.Input

        dtsCommand.Parameters.Add(dtsParameter)

 

        dtsParameter.Value = countryName

 

        dtsDataReader = dtsCommand.ExecuteReader(CommandBehavior.Default)

 

        With dtsDataReader

            .Read()

            txtResults.Text = .GetInt32(0).ToString("N0")

        End With

 

        'After reaching the end of data rows,

        ' call the Read method one more time.

        Try

            dtsDataReader.Read()

        Catch ex As Exception

            MessageBox.Show("다음 메서드를 호출하는 중 예외 에러가 발생되었습니다. :" & ControlChars.CrLf & _

            ex.Message & ControlChars.CrLf & _

            ex.InnerException.Message, "마지막으로 호출된 메서드는 다음과 같습니다. ", _

            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

 

        ' The following method is a best practice, and is

        '  required when using DtsDataParameter objects.

        dtsCommand.Dispose()

 

        Try

            dtsDataReader.Close()

        Catch ex As Exception

            MessageBox.Show("DataReader를 닫는 중 예외 발생:" & ControlChars.CrLf & _

            ex.Message & ControlChars.CrLf & _

            ex.InnerException.Message, "DataReader를 닫는 중 예외 발생", _

            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

 

        Try

            dtsConnection.Close()

        Catch ex As Exception

            MessageBox.Show("연결을 닫는 중 예외 발생:" & ControlChars.CrLf & _

            ex.Message & ControlChars.CrLf & _

            ex.InnerException.Message, "연결을 닫는 중 예외 발생", _

            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

 

        Windows.Forms.Cursor.Current = Cursors.Default

 

 

    End Sub

End Class

 

 

17.    프로그램을 실행한 후, 상단의 텍스트 상자에 여러 국가 명을 입력한 후, 버튼을 클릭해서 테스트를 수행합니다.

  

 

 

 

반응형
반응형

데이터 흐름 대상

 

 

 

DataReader 대상

DataReader 대상 ADO.NET 인터페이스를 사용하는 데이터 흐름 대상 입니다. 이 대상 개체는 다음과 같은 경우에 유용하게 사용할 수 있습니다.

 

Ÿ           SSIS 패키지 수행 후의 결과를 Reporting Service에서 출력하는 경우

Ÿ           응용 프로그램에서 SSIS 패키지에 매개 변수를 지정하여 수행한 후, 결과값을 받아오는 경우

 

DataReader 대상은 SSIS 작업 수행 후 출력되는 결과를 테이블이나 데이터 파일 등과 같은 중간 결과물을 거치지 않고 직접 ADO.NET을 사용하는 환경에서 이용할 수 있는 대상 개체입니다.

자세한 사항은 DataReader 대상을 이용한 따라하기를 참고하시기 바랍니다.

 

 

Excel 대상

 Excel 대상 Excel 파일에 결과를 저장할 때 사용되는 대상 개체입니다. 원본에서와 같이 저장할 Excel 시트를 지정하고, 매핑 탭에서 저장할 열을 매핑시킵니다.

 

 

 

 

OLE DB 대상

OLE DB 원본과 같이 가장 일반적으로 많이 사용되는 대상입니다. MS SQL 뿐만 아니라 Oracle이나, DB2, Teradata 등과 같은 다른 DBMS로 데이터를 저장할 수 있습니다. 원본에서와는 달리 대상 개체에 대한 여러 가지 설정들을 할 수 있습니다.

 

 

Ÿ           데이터 액세스 모드

ú           [테이블 또는 뷰] – 대상으로 사용할 테이블이나 뷰를 지정합니다.

ú           [테이블 또는 뷰 빠른 로드] – 대상이 SQL Server 인 경우 나타나는 옵션이며, 이 옵션을 선택하는 경우, ID 유지, Null 유지, 테이블 잠금, Check 제약 조건, 일괄 처리당 행 수, 최대 삽입 커밋 크기 등과 같은 추가적인 옵션을 설정할 수 있습니다.

ú           [테이블 이름 또는 뷰 이름 변수] – 대상으로 사용할 테이블이나 뷰의 이름을 SSIS의 변수에 저장한 경우, 이 변수를 지정합니다.

ú           [테이블 이름 또는 뷰 이름 변수 빠른 로드] – [테이블 이름 또는 뷰 이름 변수]와 동일하며, 추가적인 옵션을 설정할 수 있습니다.

ú           [SQL 명령] – 대상을 저장할 쿼리를 지정합니다. 이 쿼리는 SELECT 형태로 대상이 저장될 열을 지정하면 됩니다. 예를 들어 다음과 같은 형태로 쿼리를 지정합니다.
                       SELECT CustomerID, Title, FirstName FROM <
대상 테이블 명>
으로 설정한 후, 매핑 탭에서 열을 매핑 시켜주면 원본의 데이터가 대상 테이블의 해당 열로 입력됩니다..

 

Ÿ           ID 유지 Identity 열에 데이터를 저장할 경우, 원본의 ID값이 ID열에 사용되도록 지정합니다.

Ÿ           Null 유지 저장될 열에 기본값이 지정되지 않도록 하며, 빈 열인 경우 Null 값을 유지하도록 지정합니다.

Ÿ           테이블 잠금 테이블에 데이터를 저장하는 동안 테이블 수준 잠금을 보유하도록 지정합니다. 기본적으로 잠금 동작은 table lock on bulk load 테이블 옵션에 의해 결정됩니다. 저장 작업이 진행되는 동안에만 잠금을 보유하면 테이블에 대한 잠금 경합이 줄어들고 성능이 크게 향상됩니다.

Ÿ           CHECK 제약 조건 데이터를 저장할 때 대상 테이블 또는 뷰의 모든 제약 조건을 확인하도록 지정합니다. CHECK 제약 조건 옵션을 지정하지 않으면 모든 CHECK 제약 조건이 무시됩니다. UNIQUE, PRIMARY KEY, FOREIGN KEY 또는 NOT NULL 제약 조건은 항상 적용됩니다.

Ÿ           일괄 처리당 행 수 일괄 처리의 행 수를 지정합니다.

Ÿ           최대 삽입 커밋 크기 빠른 로드 작업을 수행하는 동안 커밋을 시도하는 일괄 처리 크기를 지정합니다. 기본값은 0이며 이 경우 모든 행이 처리된 다음 모든 데이터가 단일 일괄 처리로 커밋됩니다.

 

 

 

SQL Server Mobile 대상

 Pocket PC와 같은 Mobile 장치에 데이터를 저장하도록 지정하며, DataReader 대상과 설정 방식이 유사합니다. 이 대상을 사용하기 위해서는 연결 관리자에서 SQL Server Mobile 연결을 추가해야 합니다.

 

 

 

SQL Server 대상

 SQL Server에 최적화된 대상 개체로써, SQL이 대상인 경우 다른 대상보다 성능이 우수합니다. OLE DB 대상에서 빠른 로드를 선택한 경우 나타나는 옵션들 외에 추가적으로 다양한 옵션을 설정할 수 있습니다.

 



Ÿ           트리거 실행 데이터를 테이블에 저장할 때 대상 테이블에서 정의된 삽입 트리거가 실행될 지를 설정합니다. 트리거가 대상 테이블의 INSERT 작업에 대해 정의되면 완료된 모든 일괄 처리에 대해 발생합니다.

Ÿ           첫 번째 행 데이터를 저장할 첫 번째 행을 지정합니다. 이 속성의 기본값은 -1이며 이 경우 값이 할당되지 않습니다.

Ÿ           마지막 행 데이터를 저장할 마지막 행을 지정합니다. 이 속성의 기본값은 -1이며 이 경우 값이 할당되지 않습니다.

Ÿ           최대 오류 개수 데이터를 저장할 때 에러가 발생되더라도 허용할 개수를 지정합니다.

Ÿ           제한 시간 데이터를 저장할 때 수행되어야 할 제한 시간을 설정합니다. 데이터를 저장하는 중이더라도 제한 시간을 초과하는 경우, 작업이 실패하게 됩니다.

Ÿ           열 순서 지정 저장할 데이터의 데이터 정렬 방법을 지정합니다. 이 옵션은 저장할 데이터를 정렬해서 저장하도록 하는 설정은 아닙니다. 저장될 데이터가 대상 테이블의 클러스터형 인덱스에 따라 정렬되면 저장 작업의 성능이 향상됩니다. 데이터를 다른 순서로 정렬하거나 테이블에 클러스터형 인덱스가 없으면 ORDER 절이 무시됩니다. 열 순서 지정 속성에서 지정된 열 이름은 대상 테이블의 열이어야 합니다. 예를 들어 테이블에 Seq라는 열에 대해 클러스터형 인덱스가 설정되어 있고, 데이터 파일이 Seq 순서대로 정렬되어 있는 경우, SortedData의 속성 값을 Seq로 지정해 주면 성능이 향상될 수 있습니다.

 

 

 

데이터 마이닝 모델 성향 습득

 데이터 마이닝 모델 성향 습득 대상은 데이터 마이닝 모델 알고리즘을 통해 대상에서 수신하는 데이터를 전달함으로써 데이터 마이닝 모델의 성향을 습득하도록 설정합니다.

 

 

 

레코드 집합 대상

 레코드 집합 대상 ADO 레코드 셋에 데이터를 저장하도록 설정합니다. ADO 레코드 셋을 지정하는 간단한 방법으로는 SSIS Object 변수를 사용하는 것입니다. Object 형 사용자 변수에 결과 집합을 저장한 후, 이를 스크립트 작업이나 Foreach 루프 컨테이너 등에서 이용할 수 있습니다.


 

고급 레코드 집합 대상 편집기에서 VariableName 속성에 Object형 사용자 변수를 지정하고, 입력 열에서 저장할 열을 설정하면 됩니다. 레코드 집합 대상은 메모리에 임시로 데이터가 저장되는 형식이므로, 패키지 디버깅 작업이나 테스트 작업 등에서 많이 사용될 수 있습니다. DataReader 대상은 패키지 외부의 어플리케이션이나 서비스 등과 데이터를 연계시키는데 이용된다면, 레코드 집합 대상은 패키지 내의 서로 다른 데이터 흐름 작업이나 제어 흐름 작업 간 데이터 연계에 이용될 수 있습니다.

 

 

 

원시 파일 대상

 원시 파일 대상은 데이터 흐름 원본의 원시 파일 원본에서 이용될 수 있는 형태의 텍스트 파일로 데이터를 출력하는 대상 개체입니다. 다른 대상 개체와는 달리, 연결 관리자를 거치지 않고 직접 대상 파일을 지정합니다. 파일 내에 native format 정보가 포함되기 때문에 데이터를 읽어오는 작업의 경우 성능이 우수하지만, SSIS 패키지 외에서는 이 파일 형식을 사용할 수 없다는 단점이 있습니다.

 

 

 

차원 처리 및 파티션 처리

Analysis Service의 차원이나 큐브의 파티션을 처리하도록 지정합니다. 처리 방법을 증분, 전체, 데이터만으로 설정할 수 있으며 특정 디멘젼 또는 특정 큐브를 지정할 수 있습니다.

 

 

 

플랫 파일 대상

 일반 텍스트 파일에 데이터를 저장할 때 사용되는 대상 개체입니다. 플랫 파일 원본에서와 같이 세부적인 설정은 연결 관리자플랫 파일 연결에서 지정하며, 단지 매핑 탭에서 저장할 데이터의 열에 대한 매핑만 설정하면 됩니다.

 

 

 

-------------------------------------------------------------

SQLLeader.com / ADConsulting / 한대성 (olaper@지메일.)

-------------------------------------------------------------


반응형
반응형

데이터 흐름 원본

 

데이터 흐름 원본은 작업에서 사용할 데이터 원본을 지정하는 부분입니다. 대부분의 원본은 SSIS연결 관리자에 있는 연결을 사용합니다. 이러한 방식은 각각의 흐름마다 연결을 따로 만들어 주는 대신 하나의 동일한 원본을 재사용할 수 있는 장점이 있으며, 또한 만약 원본 소스가 변경될 때 연결 관리자에 있는 연결 개체의 속성만 변경해 주면 되는 장점이 있습니다. 데이터 흐름 영역에서는 기본적으로 6개의 데이터 원본이 제공되며, 필요에 따라 사용자는 원본 개체를 만들어 사용할 수 있습니다. 또한 변환 작업스크립트 구성 요소에서 원본 기능을 구현할 수 있습니다. 이와 관련해서는 추후에 다루도록 하겠습니다.

 

 

 

OLE DB 원본

OLE DB 원본은 가장 일반적인 데이터 원본 형태이며, OLE DB 연결을 이용하는 매우 다양한 형태의 데이터 형태를 사용할 수 있습니다.

 

 

연결 관리자의 OLE DB 연결을 추가하거나, OLE DB 원본에서 직접 추가할 수 있습니다.

 

 

 

OLE DB 원본 편집기에서 OLE DB 연결을 지정하고, 데이터 액세스 모드(A) 부분에서 데이터의 형태를 지정합니다.

지정할 수 있는 데이터 액세스 모드는 다음과 같습니다.

Ÿ           테이블 또는 뷰 데이터를 읽어올 테이블이나 뷰 이름을 지정합니다.

Ÿ           테이블 이름 또는 뷰 이름 변수 - SSIS의 변수에 대상 테이블이나 뷰의 이름을 저장하고, 이 변수를 지정할 수도 있습니다. 예를 들어 [사용자::테이블명] 이라는 SSIS 변수에 [dbo].[Data_20060815]라는 값을 저장한 후, 이 변수를 지정하는 방식입니다.

Ÿ           SQL 명령 테이블이나 뷰 대신 사용자가 지정한 SQL 쿼리를 입력할 수 있습니다. 예를 들어, [Person].[Address] 테이블을 지정하는 대신,
                         
SELECT AddressID, City, PostalCode FROM [Person].[Address] WHERE StateProvinceID = '79'
형태로 직접 SQL 쿼리를 지정할 수 있습니다.

Ÿ           변수를 사용한 SQL 명령 변수에 원본으로 사용할 SQL 쿼리를 저장한 후, 이 변수를 지정합니다.

 

 

탭에서는 원본에서 사용할 열을 지정하며, 필요한 경우, 열 이름을 변경할 수도 있습니다. 예를 들어, 테이블에 있는 TransactionID 라는 열을 TID라고 변경해서 사용하고자 할 때, 출력 열 부분에서 변경할 수도 있습니다.

데이터 원본을 사용할 때에는, 반드시 변환 과정에서 사용하는 열만 지정하도록 합니다. 모든 열을 지정하는 것이 개발하는 데에는 편리할 수 있지만, 데이터 처리 성능상에서는 매우 좋지 않습니다. 예를 들어, TransactionID ProductID만 사용할 경우, 사용 가능한 외부 열에서 두 열에 대해서만 체크하도록 합니다.

 

 

오류 출력 탭에서는 데이터를 읽어오는 과정에서 오류가 발생할 때 처리할 방법에 대한 설정을 할 수 있습니다. 각각의 열 단위로 설정이 가능하며, 오류잘림에 대해 처리 방법을 설정할 수 있습니다. 오류는 지정한 데이터의 범위를 벗어나는 큰 값이 입력되거나, 숫자형으로 설정된 열에 자형 데이터가 입력되는 것과 같은 에러 상황을 말하며, 잘림문자형의 데이터가 열의 크기보다 크게 입력이 되어 지정한 범위를 넘어서는 부분이 잘리는 것을 말합니다. 에러 처리 방법은 오류가 발생하면, 해당 행 데이터를 무시해 버리는 오류 무시가 있으며, 다른 패스로 에러 데이터를 전달하는 행 리디렉션, 해당 작업을 실패로 처리하도록 하는 구성 요소 실패가 있습니다. 한 번에 여러 행에 대해 동일한 처리방법을 지정할 경우, 컨트롤 키를 누른 상태로 각 오류 요소를 선택한 후, 아래에 있는 이 값을 선택한 셀에 설정(S)을 이용하여 설정하면 됩니다.

 

 

 

Excel 원본

Excel 원본은 엑셀 파일의 데이터 시트를 데이터 원본으로 지정하는 원본 개체입니다. 연결 관리자에 있는 Excel 연결을 사용하며, OLE DB 원본에서 테이블 또는 뷰를 지정하는 것과 같이 데이터가 있는 시트를 지정할 수도 있으며, 쿼리를 이용하여 데이터를 읽어오도록 지정할 수 있습니다.

 

 

 

플랫 파일 원본

플랫 파일 원본은 행 구분자 및 열 구분자로 구분된 텍스트 파일을 데이터 원본으로 지정하는 원본 개체입니다. 열 구분의 경우, 쉼표(,)나 탭(Tab)으로 구분되는 경우도 있으며, 고정 폭으로 저장되어 있을 수도 있습니다. 고정 폭 형태의 데이터는 보통 메인프레임 등에서 발생되는 데이터 형태이며, 연결 관리자플랫 파일 연결에서 각 열의 폭을 설정할 수 있습니다. 플랫 파일 원본 편집기에서 연결 관리자의 플랫 파일 연결을 지정한 후, OLE DB 원본에서와 같이 탭에서 읽어올 열을 지정할 수 있습니다. 열 구분자나 행 구분자, 첫 번째 행 열 머리글 설정 등과 같은 세부적인 사항은 모두 연결 관리자에서 설정하기 때문에, 플랫 파일 원본에서는 사용할 열을 지정하는 것 외에는 특별히 설정할 사항은 없습니다.

 

 

 

원시 파일 원본

원시 파일 원본 SSIS에서 신속한 데이터 처리를 수행할 수 있도록 최적화 된 형태의 플랫 파일 원본입니다. 원시 파일은 SSIS의 데이터 흐름 대상 중, 원시 파일 대상을 이용하여 만들 수 있으며, 일반 텍스트 파일과 같이 사용할 수는 없습니다. 데이터를 읽기 위한 메타 정보가 파일에 포함된 형태이기 때문에, SSIS에서는 데이터를 읽기 위한 해독 단계를 줄일 수 있어서 플랫 파일 원본에 비해 읽는 속도가 빠릅니다. 하지만, 단점으로는 SSIS 외에서는 이 데이터 형태를 사용할 수 없다는 점입니다. 만약, 모든 데이터 처리 프로세스가 SSIS로 수행이 되며, 텍스트 형태로 데이터를 넘겨주고 받아야 하는 경우라면, 이 형태를 이용하는 것이 효과적일 수 있습니다.

 

 

 

XML 원본

XML 원본OLE DB 원본과 같이 다양한 형태의 데이터를 읽어올 수 있는 원본 개체입니다. 단순한 XML 파일 뿐만 아니라, 로컬 서버 또는HTTP UNC를 이용한 원격 서버의 XML 데이터를 읽어올 수도 있습니다. XML 파일이나, HTTP, UNC 등을 이용한 원격지의 XML 데이터를

지정한 후에는, XSD(XML Schema Definition) 파일을 지정해줘야 합니다. XSD 파일은 XSD 생성 버튼을 이용하여 생성할 수도 있으며, 인라인 스키마를 사용하는 경우 지정하지 않아도 됩니다. 열 탭에서 사용할 열을 지정하는 것은 다른 원본과 동일합니다.

 

 

DataReader 원본

DataReader 원본 .NET 공급자의 데이터를 사용하며 데이터 흐름에서 이 데이터를 사용할 수 있게 합니다. 연결 관리자에서 .NET 공급자에 속한 데이터 연결을 지정한 후, 고급 DataReader 원본 편집기구성 요소 속성 탭에 있는 SqlCommand 부분에서 원본으로 사용할 데이터의 쿼리를 지정합니다.

 

 

 

 

 

반응형
반응형

웹 서비스 작업

 

웹 서비스 작업 SQL 2005 SSIS에 새롭게 추가된 작업 개체이며, 웹 메서드를 이용하여 웹 서비스에 있는 정보를 읽어오는 기능을 합니다.

예를 들어 다음과 같은 경우에 이용할 수 있습니다.

Ÿ           주식 시세를 제공하는 사이트로부터 그날의 주가 정보를 읽어와서 테이블 또는 변수에 저장하여 이를 이용합니다.

Ÿ           은행 사이트로부터 환율 정보를 읽어와서 현재 보고서의 단위를 원화에서 달러로 변환합니다.

Ÿ           아마존(Amazon.com)과 같은 사이트로부터 새로 업데이트된 도서 목록을 읽어와서 테이블에 저장합니다.

 

웹 서비스 작업을 수행하기 위해서는 연결 관리자HTTP 연결이 필요합니다. HTTP 연결에서는 서버 URL 정보나 프록시 설정 정보, 웹 서버 엑세스 위한 자격 증명 및 제한 시간 등을 설정합니다.

 

 

 

대부분의 경우에는 자격 증명을 요구하지 않지만, 인트라넷 환경 또는 기업 내에서 보안이 요구되는 환경에서는 자격 증명을 이용하거나 클라이언트 인증서를 이용하여 사용자 인증을 하도록 설정합니다.

 

 

Ÿ           연결

HttpConnection – 웹 서비스 작업을 수행하기 위한 HTTP 연결을 지정합니다.

WSDLFile – WSDL(Web Services Description Language)는 웹 서비스에서 제공하는 메서드, 메서드에 필요한 입력 매개 변수, 메서드가 반환하는 응답 및 웹 서비스와 통신하는 방법이 나열되어 있는 문서입니다. 직접 다운 받은 후, 해당 wsdl 파일을 지정할 수도 있으며, 해당 파일이 저장될 경로만 지정한 후, 아래에 있는 WSDL 다운로드(D) 버튼을 눌러 다운 받을 수도 있습니다.

OverwriteWSDLFile – WSDL 파일을 다운 받는 경우, 해당 파일을 겹쳐 쓸지를 설정합니다.

 

Ÿ           일반

Name – 작업 이름을 지정합니다.

Description – 작업에 대한 설명을 지정합니다.

 

 

 

Ÿ           입력

Service – 목록에서 웹 메서드를 실행하는 데 사용할 웹 서비스를 지정합니다.

Method – 목록에서 실행할 작업에 사용할 웹 메서드를 지정합니다.

WebMethodDocumentation - 웹 메서드에 대한 설명을 입력하거나 찾아보기 단추 (...)를 클릭하여 웹 메서드 설명서 대화 상자에 설명을 입력합니다.

 

이름 웹 메서드에 대한 입력의 이름을 나타냅니다.

유형 입력 데이터의 유형을 나타냅니다.

입력되는 값을 설정합니다.

변수 입력되는 값이 변수에 저장된 경우, 변수 체크박스를 체크한 후, 값에서 해당 변수를 지정합니다.

 

Ÿ           출력

OutputType – 출력 결과를 저장할 형태를 지정합니다. 파일 연결을 사용할 경우, File 속성에서 파일 연결을 지정하며, 변수를 사용할 경우, Variable 속성에서 저장할 변수를 지정합니다.

 

 

 

따라하기

 

본 예제에서는 실시간 환율 정보를 웹 사이트에서 읽어와서 결과 파일에 저장하는 예제를 구현합니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 WebService.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

2.       왼쪽 도구 상자에서 웹 서비스 작업을 선택한 후, 제어 흐름 영역에 추가하고, 이름을 [환율 출력]으로 변경합니다.

 

3.       웹 서비스 작업 편집기일반 탭에서 HttpConnection의 속성에서 <새 연결..>을 선택한 후, HTTP 연결을 추가합니다.
HTTP
연결 관리자 편집기에서 서버 URL(U)의 값에
             http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl
값을 입력합니다.


 

4.       WSDLFile 속성에 D:\Currency.wsdl 로 파일명을 입력한 후, 아래에 있는 WSDL 다운로드(D) 버튼을 클릭하여 WSDL 파일을 다운로드 합니다.



 

5.       입력 탭에서, ServiceCurrencyExchangeService, MethodgetRate로 설정한 후, 아래의 Method 부분에서 country1의 값은 USA, country2의 값은 KOREA 로 지정합니다. (필요에 따라 이 값을 변경하셔도 됩니다.)



 

6.       출력 탭에서, OutputType을 파일 연결로 설정하고, File 속성에서 <새 연결..>을 선택하여 결과를 저장할 파일 연결을 지정합니다. 파일 연결 관리자 편집기에서 사용 유형을 파일 만들기로 지정하고, 파일(F) D:\Result.xml로 설정합니다.



 

7.       확인을 누른 후, 작업을 수행해 봅니다. 출력 결과는 다음과 같은 형태입니다.



 

 

웹 서비스 작업 SQL 2005 SSIS에 포함된 다양한 작업 개체 중 유용하게 사용될 수 있는 개체 중 하나입니다. 이러한 작업 개체를 데이터 처리 프로세스에서 이용함으로써 보다 다양한 형태의 데이터 소스를 이용할 수 있습니다.

 

 

반응형
반응형

메시지 큐 작업

 

 메시지 큐 작업 MSMQ(Microsoft Message Queuing) 서비스를 이용하여 메시지를 주고 받을 수 있는 기능이며, SQL 2000 DTS에서도 포함되어 있는 기능입니다. 메시지 큐를 이용하는 작업은 비 동기적으로 서로 다른 작업 간에 메시지 또는 파일 등을 주고 받을 수 있습니다. 예를 들어, 서버에서 처리된 전일 매출 보고서 파일을 마케팅 부서의 사용자에게 모두 전달하는 경우, 사용자들의 PC가 꺼져 있는 경우라도 별도의 MSMQ 서비스가 운영되는 서버로 보낼 수 있습니다. 다음 날 아침, 이 사용자들이 PC를 켜서 작업을 수행하면 MSMQ에 저장되어 있는 파일을 자동으로 받게 됩니다. 또 다른 예로, 한 시스템에서 여러 패키지들이 수행되는 경우, 먼저 수행되어야 할 패키지가 작업이 완료된 경우, MSMQ에 완료되었다라는 메시지를 보내게 됩니다. 그러면 다른 패키지가 이 메시지를 판독하여 작업 수행 가능 여부를 판단하고 진행하게 됩니다.

 

메시지를 보내거나 받을 때, 메시지 큐 작업은 데이터 파일, 문자열, 변수에 대한 문자열 메시지 또는 변수 중 하나의 메시지 유형을 사용합니다. 변수에 대한 문자열 메시지 유형은 메시지를 받을 때만 사용할 수 있습니다. 메시지 큐 작업을 수행하기 위해서는 Integration Service가 설치되어 있어야 합니다.

 

메시지 큐 작업연결 관리자MSMQ 연결을 사용합니다. MSMQ 연결에서는 MSMQ경로를 지정합니다.

 

 

 

 

 

 

Ÿ           일반

Name – 작업의 이름을 지정합니다.

Description – 작업의 설명을 지정합니다.

Use2000Format – MSMQ 2000 형식을 사용할 지를 설정합니다.

MSMQConnection – 메시지 큐 작업을 위한 MSMQ 연결을 지정합니다.

Message – 메시지 큐 작업에서 메시지를 보내거나 받을지를 지정합니다.

 

Ÿ           보내기

UseEncryption – 메시지를 암호화 하여 보낼지를 설정합니다.

EncryptionAlgorithm – 암호화 하여 보낼 경우, 암호화 할 알고리즘을 지정합니다.

MessageType – 보낼 메시지의 유형을 설정합니다.

ú           데이터 파일 메시지 파일 형태의 메시지를 보냅니다.

ú           변수 메시지 변수에 저장된 내용을 메시지로 보냅니다.

ú           문자열 메시지 사용자가 입력한 문자열을 메시지로 보냅니다.

 

Ÿ           받기

RemoveFromMessageQueue – 메시지를 받은 후, 해당 메시지를 큐에서 제거할 지를 설정합니다.

ErrorIfMessageTimeOut – 메시지 제한 시간이 초과할 경우, 작업을 실패로 처리할 지를 설정합니다.

TimeoutAfter – ErrorIfMessageTimeOut True 인 경우, Timeout 시간()을 지정합니다.

MessageType – 받을 메시지의 유형을 설정합니다.

ú           데이터 파일 메시지 메시지가 파일 형태로 저장됩니다..

ú           변수 메시지 메시지가 변수에 저장됩니다.

ú           문자열 메시지 메시지 큐에서 받은 메시지가 StringMessage에 지정한 문자열과 동일한지 비교합니다.

ú           변수에 대한 문자열 메시지 문자열 메시지로 전송되는 내용을 변수에 저장합니다.

SaveFileAs – MessageType데이터 파일 메시지인 경우 나타나며, 메시지를 저장할 파일 위치를 지정합니다.

Overwrite – MessageType데이터 파일 메시지인 경우 나타나며, 저장할 위치에 동일한 파일이 있는 경우 덮어쓸 지를 설정합니다.

Filter – 메시지에 대한 필터를 사용할 지를 설정합니다. 특정 패키지로부터 온 메시지만 받도록 할 경우, 이 속성값을 True로 지정하고 IdentifierReadOnly의 값을 지정합니다.

Compare – MessageType문자열 메시지 또는 변수에 대한 문자열 메시지 인 경우 나타나며, 없음 외의 경우, CompareString에 지정된 값과 메시지의 값에 대한 비교 작업을 수행합니다.

 

반응형

+ Recent posts

반응형