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

 

따라하기 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에 지정된 값과 메시지의 값에 대한 비교 작업을 수행합니다.

 


메일 보내기 작업

 

메일 보내기 작업 SMTP를 이용하여 메일을 보낼 수 있는 작업 개체입니다. SQL 2000 DTS에서 메일 보내기 작업 MAPI(Messaging Application Program Interface)를 이용하기 때문에 메일을 보내기 위해서는 서버에 아웃룩(Outlook)이 설치되어 있어야 합니다. SQL 2005 SSIS메일 보내기 작업 SMTP를 이용하기 때문에 별도로 아웃룩을 설치할 필요가 없으며, 다른 서버의 SMTP 서비스를 이용할 수 있기 때문에 서버에 별도의 메일 관련 서비스를 실행시킬 필요가 없습니다.

 

메일 보내기 작업에서는 연결 관리자 내의 SMTP 연결을 사용합니다. SMTP 연결 SMTP 서비스가 운영되는 서버 명 및 인증 방법만 지정해 주면 됩니다.

 

 

 

 

 

Ÿ           메일

SmtpConnection – SMTP 연결을 지정합니다.

From – 메일을 보내는 사람의 메일 주소

To – 메일을 받는 사람의 메일 주소. 받는 사람이 여러 명일 경우, 세미콜론(;)으로 구분하여 입력합니다.

Cc – 참조 메일 주소.

BCc – 숨은 참조 메일 주소.

Subject – 메일 제목

MessageSourceType – 메일 본문 저장 형태를 지정합니다.

ú           직접 입력 직접 텍스트 형식으로 입력합니다.

ú           파일 연결 텍스트 형식으로 저장된 파일을 이용합니다.

ú           변수 본문 내용이 저장된 변수를 지정합니다.

MessageSource – 메일 본문 내용

Priority – 메시지의 우선 순위

Attachments – 첨부 파일

 

메일 보내기 작업은 데이터 추출 프로세스에서 결과를 전송 받거나 최종 보고서를 보내는 작업에서 많이 이용됩니다. SQL 2000 DTS에서 MAPI가 설정이 안된 경우, xp_sendmail과 같은 저장 프로시저를 이용하거나, ActiveX 스크립트 작업에서 CDO 개체를 만들어 이용하는 방법도 사용하였습니다. SQL 2005 SSIS에서는 SMTP를 이용하기 때문에 작업을 사용하는데 훨씬 용이해졌으며, 작업 설정도 상당히 편리해 졌습니다.

 

메일 내용(MessageSource)은 직접 변수의 내용을 사용하도록 설정하여 동적으로 지정할 수 있지만, 메일 제목(Subject)이나 첨부 파일(Attachments)메일 탭에서 직접 설정할 수 없습니다. 예를 들어, 메일 제목을 결과 보고서 2006 8 13이나 첨부 파일을 D:\Reports\Report_20060813.xls등과 같이 동적인 값으로 지정하는 경우입니다. 이럴 경우, 패키지에 공통으로 포함된 기능인, 식 탭에 있는 Expressions 속성을 이용하면 쉽게 설정할 수 있습니다.

 

프로세스 실행 작업

 

 프로세스 실행 작업은 데이터 처리 프로세스 내에서 윈도우 어플리케이션 또는 콘솔 어플리케이션을 호출하는 작업 개체입니다. 예를 들어, 압축된 형태로 된 데이터 파일을 FTP를 이용하여 가져온 후, 압축을 해제하는 프로그램을 이용하여 이 파일의 압축을 풀어야 하는 경우도 있습니다. 해당 프로그램을 실행할 때에는 압축 파일 명이나 출력 대상 경로 지정과 같은 입력 매개 변수를 설정하며, 경우에 따라서는 프로그램의 실행 결과값을 변수에 저장하거나, 오류 정보를 관리해야 할 수 있습니다. SQL 2000 DTS에서도 프로세스 실행 작업은 있었으나, SQL 2005 SSIS에서는 훨씬 다양한 옵션을 가진 작업 개체로 향상되었습니다.

 

 

Ÿ           프로세스

RequireFullFileName – 프로그램을 실행할 때 전체 경로가 필요한지를 설정합니다. 만약 이 값을 True로 설정한 후, 전체 경로에 해당 파일이 없으면 실패가 됩니다. 이 속성은 다음과 같은 경우에 유용합니다. 윈도우의 PATH 속성에 포함된 경로에 있는 프로그램들 (notepad.exe 또는 mapaint.exe)은 전체 경로를 지정하지 않아도 수행이 됩니다. 예를 들어, 사용자가 notepad.exe라는 이름의 프로그램을 만든 후 특정 폴더에 저장하고, 이 폴더에 있는 해당 프로그램이 실행되도록 해야 하는 경우, RequireFullFileName 의 속성을 True로 설정하고 Executable에 전체 경로가 포함된 프로그램 경로를 지정합니다

Executable – 실행할 프로그램 명입니다. 프로그램이 위치한 전체 경로가 포함되는 것이 일반적이며, 윈도우의 PATH 속성에 포함되어 있는 프로그램들을 실행시키는 경우, 단순히 프로그램 이름 및 확장자 명만을 입력해도 됩니다. ( : notepad.exe) 프로그램 명에서는 입력 매개변수 또는 출력 매개변수를 지정할 수 없습니다.

Arguments – 프로그램 실행 시 지정할 명령 프롬프트 인수를 지정합니다.

WorkingDirectory – 프로그램이 실행될 작업 폴더를 지정합니다. 특정 폴더에서 해당 프로그램이 실행하도록 해야 하는 경우, 이 속성값을 지정합니다.

StandardInputVariable – 프로그램에 입력 변수로 전달할 사항이 포함된 SSIS 변수를 지정합니다. Arguments에 직접 변수를 쓰는 대신, SSIS자형 변수에 입력 값을 저장해 놓은 후, 이 속성에서 해당 변수를 지정하면 됩니다. 예를 들어, expand.exe라는 압축 실행 프로그램을 수행할 것이며, 이 때 입력 매개 변수인 압축 파일명은 앞 단계에서 지정이 되어야 하는 경우를 고려해 봅시다. Executable의 속성 값을 expand.exe로 지정한 후, SSIS에서 FileName이라는 문자형 변수에 d:\data_0813.cab 라는 값을 설정합니다. 이 후, StandardInputVariable 속성에서 [사용자::FileName]으로 지정해 주면 됩니다.

StandardOutputVariable – 프로그램이 출력된 후의 결과를 SSIS의 변수에 저장하도록 설정합니다.

StandardErrorVariable – 프로그램 수행 중 발생된 에러 정보를 SSIS 변수에 저장하도록 설정합니다. 이 속성을 이용하여 에러 핸들링과 같은 단계를 수행할 수 있습니다. 예를 들어 expand.exe를 이용하여 압축 파일을 풀려고 할 때, 해당 파일이 다른 프로그램에서 사용 중이어서 잠금이 발생이 되어 수행이 실패했다고 가정합시다. 이러한 실패 결과를 사용자 변수에 저장시키고, 뒷 단계에서 해당 변수 값의 내용을 판단하여 공유 잠금으로 인한 에러인 경우, 다시 시도하도록 설정할 수 있습니다.

FailTaskIfReturnCodeIsNotSuccessValue – 프로그램이 종료가 되면 결과 값을 반환합니다. 일반적인 결과 값은 0입니다. 만약 프로그램이 반환한 결과값이 SuccessValue의 결과값과 다른 경우에 해당 작업을 실패로 처리할 지를 설정합니다.

SuccessValue - 성공을 표시하기 위해 실행 파일에서 반환하는 값을 지정합니다. 기본적으로 이 값은 0으로 설정됩니다.

TimeOut – 프로그램이 실행될 수 있는 시간()을 지정합니다. 0으로 지정하면 시간 제한 없이 프로그램이 완료되거나 오류가 발생할 때까지 수행되도록 한다는 것을 의미합니다.

TerminateProcessAfterTimeOut - TimeOut 속성에 지정한 제한 시간 후의 프로그램을 강제로 종료할 지를 설정합니다. 이 옵션은 TimeOut 0이 아닌 경우에만 사용할 수 있습니다.

WindowStyle – 프로그램이 실행될 때의 창의 모습을 지정합니다.

 

 

SQL 2000 DTS에서는 프로그램을 실행시킬 때 동적 속성 작업이나 ActiveX 스크립트 작업을 이용하여 프로세스 실행 작업의 매개 변수 값을 변경하는 방식으로 동적인 작업을 구현하였습니다. 실제 예로, Filter.exe 라는 웹 로그 프로그램에 대해 처리시간을 지정하는 입력 매개 변수를 지정할 때 다음과 같은 형태의 ActiveX 스크립트 작업을 이용하였습니다.

 

 

 

만약 이 경우, SSIS프로세스 실행 작업을 이용하는 경우, StandardInputVariable의 값에 [사용자::작업시간]이라는 변수를 바로지정해 주면 됩니다.

 

 

 

 



대량 삽입 작업

 

대량 삽입 작업 SQL ServerBULK INSERT 문이나 bcp.exe 유틸리티와 같이 텍스트 형식의 데이터 파일(=플랫 파일) SQL Server로 입력하는 작업 개체 입니다. 텍스트 파일을 SQL Server로 입력한다는 점에서는 데이터 흐름 작업에 포함될 수 있는 부분이지만, 이 작업은 제어 흐름 영역에서 수행이 되며, 별도의 데이터 흐름에서 수행되는 것은 아닙니다. 데이터 흐름을 사용하지 않기 때문에 단순히 원본인 텍스트 파일에서 대상인 SQL Server로 입력하는 작업만 가능하며, 가공이나 집계, 정렬 등과 같은 변환 기능은 구현할 수 없습니다. 하지만, 데이터 처리 준비 작업 등과 같이 단순히 텍스트 형태의 데이터 파일을 SQL Server에 입력하는 작업인 경우, 대량 삽입 작업을 이용하는 것이 단순하며 성능에서도 다른 방식에 비해 우수할 수 있습니다.

 

 

대량 삽입 작업 편집기 내에 있는 연결 탭과 옵션 탭에서 대량 삽입 작업에 대한 속성을 설정합니다.

 

연결

 

 

연결 탭에서는 원본 및 대상, 원본의 서식을 설정합니다.

Ÿ           대상 연결
Connection –
원본 텍스트 파일로부터 읽어 들인 데이터를 입력할 대상 테이블을 지정합니다. 연결 관리자OLE DB 연결을 사용합니다.
DestinationTable –
대상 테이블을 지정합니다.

 

Ÿ           서식

Format – 대량 삽입 작업을 위한 서식의 형태를 선택합니다.

ú           파일 사용 서식이 지정된 파일을 사용합니다. BULK INSERT 문에서 WITH (FORMATFILE = …) 옵션과 동일합니다.

ú           지정 직접 RowDelimeter ColumnDelimerer의 속성을 지정합니다.

RowDelimeter – 행 구분자를 설정합니다.

ColumnDelimeter – 열 구분자를 설정합니다.

 

Ÿ           원본 연결
File –
연결 관리자파일 연결을 사용하여 원본으로 사용될 텍스트 파일을 지정합니다.

 

 

 

옵션

 

 

옵션 탭에서는 CodePage FileType 등과 같이 대량 삽입 작업에 대한 고급 설정을 할 수 있습니다. 대부분의 경우, 기본값으로 직업이 수행할 수 있습니다. 하지만, MaxErrors 등과 같이 대량 삽입 작업 시 허용할 에러 수 등을 지정할 때 이용할 수 있습니다.

 

Ÿ           고급 옵션

CodePage

ú           ACP - char, varchar 또는 text 데이터 형식의 열은 ANSI/Microsoft Windows 코드 페이지(ISO 1252)에서 SQL Server 코드 페이지로 변환됩니다.

ú           OEM - char, varchar 또는 text 데이터 형식의 열은 시스템 OEM 코드 페이지에서 SQL Server 코드 페이지로 변환됩니다.

ú           RAW – 다른 코드 페이지로의 변환이 이루어지지 않는 가장 빠른 옵션입니다.

ú           기타 코드 페이지 특정 코드( : 949)로 변환됩니다.

 

DataFileType

ú           char – 일반 문자 형식

ú           native - 네이티브(데이터베이스) 데이터 형식. bcp 유틸리티로 SQL Server 에서 데이터를 대량 로드하여 네이티브 데이터 파일을 만들 수 있습니다. 네이티브 형식은 char 형식보다 더욱 성능이 뛰어납니다.

ú           widechar – 유니코드 문자

ú           widenative - 데이터가 유니코드로 저장되는 네이티브(데이터베이스) 데이터 형식. char, varchar text 열은 제외됩니다. bcp 유틸리티로 SQL Server 에서 데이터를 대량 로드하여 widenative 데이터 파일을 만듭니다. widenative 값은 widechar 값을 대체하여 보다 뛰어난 성능을 제공합니다. 데이터 파일에 ANSI 확장 문자가 포함되어 있으면 'widenative'를 지정하십시오.

 

BatchSize - 일괄 처리의 행 수를 지정합니다. BatchSize 0으로 설정하면 데이터가 단일 일괄 처리로 로드됩니다.

 

LastRow - 삽입할 마지막 행의 번호를 지정합니다. 기본값은 0이며 이는 지정한 데이터 파일의 마지막 행을 가리킵니다.

 

FirstRow - 삽입할 첫 번째 행의 번호를 지정합니다. 기본값은 1이며 이는 지정한 데이터 파일의 첫 번째 행입니다.

 

 

Ÿ           옵션

Options

ú           CHECK 제약 조건 대량 삽입 작업 중에 대상 테이블 또는 뷰의 모든 제약 조건을 확인하도록 지정합니다.
CHECK
제약 조건 옵션을 지정하지 않으면 모든 CHECK 제약 조건이 무시됩니다. UNIQUE, PRIMARY KEY, FOREIGN KEY 또는 NOT NULL 제약 조건은 항상 적용됩니다.

ú           Null 유지 삽입된 열에 기본값이 지정되지 않도록 하며, 빈 열인 경우 Null 값을 유지하도록 지정합니다.

ú           ID 삽입 가능 – Identity 열에 데이터를 입력할 경우, 가져온 데이터 파일의 ID값이 ID열에 사용되도록 지정합니다. ID 삽입 가능을 체크하지 않는 경우, 이 열의 ID값은 확인하지만, 가져오지는 않습니다.

ú           테이블 잠금 대량 삽입 작업이 진행되는 동안 테이블 수준 잠금을 보유하도록 지정합니다. 테이블에 인덱스가 없고 TABLOCK이 지정되어 있으면 여러 클라이언트가 동시에 테이블을 로드할 수 있습니다. 기본적으로 잠금 동작은 table lock on bulk load 테이블 옵션에 의해 결정됩니다. 대량 로드 작업이 진행되는 동안에만 잠금을 보유하면 테이블에 대한 잠금 경합이 줄어들고 성능이 크게 향상됩니다.

ú           트리거 실행 대량 삽입 작업 중에 대상 테이블에서 정의된 삽입 트리거가 실행되도록 지정합니다. 트리거가 대상 테이블의 INSERT 작업에 대해 정의되면 완료된 모든 일괄 처리에 대해 발생합니다.

 

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

 

MaxErrors - 대량 삽입 작업을 취소하기 전까지 데이터에서 허용되는 최대 구문 오류 수를 지정합니다. 대량 삽입 작업으로 가져올 수 없는 각 행은 무시되고 하나의 오류로 계산됩니다. max_errors를 지정하지 않으면 기본값은 0입니다.

 

 

XML 작업

 

 SQL 2005 SSIS에 포함되어 있는 XML 작업 XML 파일과 관련되어 다양한 작업을 수행할 수 있는 작업 개체입니다.

XML 데이터를 조회하거나, 변경, 병합 또는 새로운 XML 결과 파일을 생성할 수 있습니다.

 

XML 작업 개체를 이용하여 다음과 같은 작업을 수행할 수 있습니다.

 

Ÿ   여러 XML 데이터를 병합하여 하나의 XML 파일로 병합하는 작업

Ÿ   XSLT Style Sheet을 이용하여 XML 파일의 결과값 출력 작업

Ÿ   XPATH를 이용한 XML 파일 내의 데이터 조회 작업

Ÿ   서로 다른 두 개의 XML 파일들에 대한 비교 및 XML Diffgram 파일에 해당 차이점 기록 작업

Ÿ   XML 파일에 대한 유효성 검사 작업

 

 

XML 작업의 속성 편집기 창에는 다른 작업들에 비해 상당히 많은 속성을 지정할 수 있으며, 작업 유형(OperationType)에 따라 각 작업 속성의 의미가 달라집니다.

 

 

 

 

 

공통 속성

Ÿ           입력

OperationType – XML 작업의 유형을 설정합니다. 작업 속성은 다음과 같습니다.

ú           Validate - DTD(문서 유형 정의) 또는 XSD(XML 스키마 정의) 스키마와 비교하여 XML 문서의 유효성을 검사합니다.

ú           XSLT – 원본 XML 문서를 XSL Style Sheet에 지정된 형태로 출력합니다.

ú           XPATH – XPATH라는 XML 데이터 조회 문을 이용하여 원본 XML 문서에 있는 데이터를 조회합니다.

ú           Merge – 두 개의 XML 문서를 병합합니다.

ú           Diff – 두 개의 XML 문서를 비교합니다. 비교 작업은 다양한 수준으로 설정할 수 있습니다.

ú           Patch – 비교 작업에서 두 문서간의 비교 결과인 XDL Diffgram 출력을 생성한 경우, 이 결과를 이용하여 원본에 대해 변경 작업을 수행한 후, 새로운 결과를 생성합니다.

ú           SourceType – 원본 XML에 대한 형태를 지정합니다. 변수, 직접 입력, 파일 연결로 설정할 수 있습니다.

 

Ÿ           출력
SaveOperationResult –
결과를 저장할 것인지를 설정합니다. True로 설정한 경우, OperationResult 속성 부분에서 결과 파일 형태를 지정할 수 있습니다.

 

 

 

OperationType = Validate

원본 XML 문서에 대한 유효성을 체크합니다.

 

Ÿ           유효성 검사 옵션

ValidationType – 유효성 검사 작업 유형을 설정합니다.

ú           DTD – DTD(Document Type Definition)를 사용합니다.

ú           XSD – XSD(XML Schema Definition)를 사용합니다. 이 경우, XSD 스키마 파일을 지정해 줘야 합니다

FailOnValidationFail – 유효성 검사 결과가 실패(유효하지 않음)인 경우, XML 작업을 실패로 처리할 지를 설정합니다.

 

 

 

OperationType = XSLT

XSLT XML 문서를 다른 형태의 XML 형태 또는 문서 형태로 출력하기 위한 변환 언어로 작성된 문서입니다. OperationType 속성 값을 XSLT로 지정한 후, XSLT 문서를 설정하여, 원본 XML 문서를 사용자가 원하는 형태로 출력할 수 있습니다.

 

Ÿ           두 번째 피연산자
XSLT
문서를 지정합니다..

 

 

 

OperationType = XPATH

XPATH 쿼리를 이용하여 원본의 XML 데이터의 값을 조회합니다.

 

Ÿ           XPath 옵션
PutResultInOneNode –
결과를 단일 노드에 쓸지를 설정합니다.

PutResultInOneNode = True 인 경우

<ResultRootNode>

 <Address AddressID="497" AddressLine1="#9900 2700 Production Way" />

 <Address AddressID="13079" AddressLine1="081, boulevard du Montparnasse" />

</ResultRootNode>

PutResultInOneNode = False 인 경우

<Address AddressID=”497” AddressLine1=”#9900 2700 Production Way” />

<Address AddressID=”13079” AddressLine1=”081, boulevard du Montparnasse” />

 

XPathOperation – 결과 형태를 설정합니다.

ú           계산 – XPath 쿼리의 결과를 반환합니다.

ú           노드 목록 - XPath에서 지정한 노드를 XML 형태로 반환합니다.

ú           – XPath에서 지정한 노드의 내부 텍스트 값을 연결 문자열로 반환합니다.

Ÿ           두 번째 피연산자
XQuery
를 지정합니다. 변수, 직접 입력, 파일 연결로 지정할 수 있습니다.

 

 

 

OperationType = Merge

두 개의 서로 다른 XML 문서 또는 데이터를 병합하는 작업을 수행합니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서와 병합할 두 번째 XML 문서를 지정합니다.

 

Ÿ           병합 옵션
병합 작업을 수행할 때 사용할 XPath 쿼리 유형 및 XPath 쿼리를 지정합니다. 만약 단순히 두 문서를 병합할 경우, XPathStringSource 를 공백으로 설정하면 됩니다. 물론 이 경우, 두 문서간의 구조가 유효해야 합니다.

 

 

 

OperationType = Diff

두 개의 서로 다른 XML 문서 또는 데이터에 대해 비교 작업을 수행합니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서와 비교할 두 번째 XML 문서를 지정합니다.

Ÿ           비교 옵션

DiffAlgorithm – 문서를 비교할 때 사용할 알고리즘을 지정합니다.

ú           자동 - XML 작업에서 처리 속도가 빠른 알고리즘을 사용할 것인지 아니면 정확도가 높은 알고리즘을 사용할 것인지 결정합니다.

ú           빠름 - 빠르지만 정확도가 떨어지는 비교 알고리즘을 사용합니다.

ú           정확 - 정확한 비교 알고리즘을 사용합니다.

DiffOptions – 비교 작업에서 적용할 비교 옵션을 설정합니다.

ú           IgnoreXMLDeclaration - XML 선언을 비교할지 여부를 설정합니다.

ú           IgnoreDTD - DTD(문서 유형 정의)를 무시할지 여부를 설정합니다.

ú           IgnoreWhiteSpaces - 공백을 비교할지 여부를 설정합니다.

ú           IgnoreNamespaces – 각 요소의 네임스페이스 URI(Uniform Resource Identifier)와 해당 요소의 특성 이름을 비교할지 여부를 설정합니다.

ú           IgnoreProcessingInstructions - 처리 명령을 비교할지 여부를 설정합니다.

ú           IgnoreOrderOfChildElements - 자식 요소의 순서를 비교할지 여부를 설정합니다.

ú           IgnoreComments - 주석 노드를 비교할지 여부를 설정합니다.

ú           IgnorePrefixes - 요소와 특성 이름의 접두사를 비교할지 여부를 설정합니다.

FailOnDifference – 두 문서 간 차이점이 발생될 경우, XML 작업을 실패로 처리할 지를 설정합니다.

SaveDiffGram – 두 문서 간의 비교 결과인 DiffGram 문서를 출력할 지를 설정합니다.

DiffGramSave – SaveDiffGram 속성이 True인 경우, DiffGram 문서를 저장할 위치를 지정합니다.

 

 

 

OperationType = Patch

두 개의 서로 다른 XML 문서에 대해 비교한 후, 차이점에 대해 보정 작업을 수행할 경우에 이 작업 유형을 사용합니다. 예를 들어, 동일한 구조의 XML 문서에서 원본은 <ID>497</ID>, 비교 대상은 <ID>499</ID> 인 경우, Diff 연산을 수행한 후, DiffGram 결과를 저장하도록 한 후 확인해 보면 원본의 497 값을 499로 바꿀 수 있는 DiffGram 문이 생성됩니다. DiffGram 문서와 원본 XML 문서를 이용하여 ID 499로 변경하는 작업이 Patch 작업입니다.

 

Ÿ           두 번째 피연산자
입력 부분에 지정된 첫 번째 XML 문서에 대해 변경 작업을 수행할 DiffGram 문서를 지정합니다.

 

 

 

 

따라하기

 

간단한 XML 데이터를 XSLT를 이용하여 html형식의 파일로 출력하는 예를 수행해 봅니다.

 

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

 

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

 

3.       XML 작업 속성 편집기 창에서 입력 부분의 OperationTypeXSLT로 설정하고, SourceType직접 입력, SecondOperandType직접 입력으로 설정합니다. 원본 및 XSLT를 별도의 파일로 만든 후, 파일 연결 관리자를 이용하여 사용해도 되지만, 간략히 하기 위해 직접 입력으로 설정합니다.

 

4.       입력 부분의 Source에 아래의 원본 XML, 두 번째 피연산자SecondOperand 부분에 아래의 XSLT를 입력합니다.

원본 XML

<?xml version="1.0" encoding="euc-kr"?>

<addressBook>

  <address>

    <name>홍길동</name>

    <handphone>011-111-1111</handphone>

    <home>서울시 영등포구 여의도동...</home>

    <birthday>1556.01.01</birthday>

    <hobby1>컴퓨터</hobby1>

    <hobby2>오락하기</hobby2>

  </address>

  <address>

    <name>김철수</name>

    <handphone>011-111-2222</handphone>

    <home>서울시 송파구 잠실동..</home>

    <birthday>1975.01.02</birthday>

    <hobby1>당구</hobby1>

    <hobby2>골프</hobby2>

  </address>

  <address>

    <name>한대성</name>

    <handphone>016-494-0000</handphone>

    <home>서울시 강동구 길동...</home>

    <birthday>1900.05.14</birthday>

    <hobby1>웹서핑</hobby1>

    <hobby2>졸기</hobby2>

  </address>

</addressBook>

      
       XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" />

<xsl:template match="/">

  <html>

    <head>

      <title>주소록</title>

    </head>

    <body>

      <table border="1">

        <tr>

          <th>이름 </th><th>주소</th><th>취미1</th><th>취미2</th>

        </tr>

        <xsl:for-each select="addressBook/address"> 

           <tr>

            <td><xsl:value-of select="name"/></td>

            <td><xsl:value-of select="home"/></td>

            <td><xsl:value-of select="hobby1"/></td>

            <td><xsl:value-of select="hobby2"/></td>

           </tr>

        </xsl:for-each>

      </table>

    </body>

  </html>

</xsl:template>

</xsl:stylesheet>

 

5.       출력 부분의 SaveOperationResult 속성을 True로 설정한 후, OperationResult 속성의 + 단추를 클릭하여 확장 속성을 지정합니다.
DestinationType
파일 연결로 설정하고, OverwriteDestinationTrue로 설정한 후, Destination 속성에서 <새 파일 연결..>을 클릭하여 결과가 저장될 html 파일을 지정합니다. 이 때 파일 연결 관리자에서 사용 유형파일 만들기로 지정합니다.



6.       패키지를 수행한 후, 생성된 Html 형태의 결과를 확인합니다.



 

 

SQL Server 2005에서는 XML과 관련된 기능이 많이 향상되었습니다. SSIS에서도 역시 다양한 XML 기능이 추가되어 XML 데이터를 이용한 처리 작업을 편리하게 수행할 수 있습니다.



패키지 실행 작업 및 DTS 2000 패키지 실행 작업

 

SQL 2005 SSIS에서는 패키지 실행 작업을 이용하여 SQL 2005 SSIS 패키지를 호출하여 실행할 수 있으며, DTS 2000 패키지 실행 작업을 이용하여 SQL 2000 DTS 패키지를 사용할 수 있습니다.

 

 패키지 호출 기능은 다음과 같이 이용할 수 있습니다.

1.       복잡한 데이터 추출 프로세스 또는 대규모의 데이터 처리 프로세스의 각 작업들을 작은 단위로 분리하여 관리할 수 있습니다. 데이터 웨어하우스(DW) 환경을 예로 설명하겠습니다. 데이터 웨어하우스에 데이터를 적재하기 위해 전체 추출 단계를 하나의 패키지로 만들 수도 있습니다. 하지만 이렇게 하나의 패키지로 만든 경우, 유지 관리나 추가 개발 등의 작업을 수행하는 데 상당한 어려움이 있습니다. 전체 프로세스를 하나로 만드는 대신 주제별로 패키지를 만든 후, 마스터 패키지(=부모 패키지)에서 각각의 개별 패키지(=자식 패키지)를 호출하는 방식으로 관리한다면 보다 효율적으로 개발 및 운영할 수 있습니다.

 

2.       패키지 보안을 이용할 수 있습니다. 만약 데이터 추출 프로세스 중 중요한 부분이 공개되면 안 되는 경우, 해당 부분만을 별도의 패키지로 만든 후, 패키지 호출 작업으로 해당 부분을 호출하도록 할 수 있습니다. 어플리케이션에서 중요한 기능을 DLL이나 컴포넌트 등으로 만들어 소스는 볼 수 없는 대신, 기능만을 사용하도록 하는 방식과 유사합니다. 별도로 만든 패키지에는 SSIS에서 기본적으로 제공하는 암호 설정 기능을 이용하여 조회나 수정이 불가능하도록 설정할 수 있습니다.

 

3.       작업 수행 및 관리가 용이합니다. 예를 들어, 매일 수행해야 할 패키지가 10개가 있다고 가정합니다. 각 패키지를 수행하도록 하기 위해서는 10개의 SQL Agent 작업을 만들어 줘야 합니다. 만약 각 패키지 간에 수행되는 순서가 정해져 있다든지, 서버의 부하를 주지 않기 위해 동시에 수행해야 할 패키지의 수를 제한해야 한다면, SQL Agent 작업을 수행하는 데 추가적으로 작업 수행 관리 부분을 만들어줘야 할 것입니다. 이런 방법 대신 하나의 마스터 패키지(=부모 패키지)를 만든 후, 패키지 실행 작업을 이용하여 10개의 개별 패키지(=자식 패키지)를 호출하도록 만들 수 있습니다. 패키지가 수행되어야 하는 순서나 동시에 수행 가능한 패키지 수를 쉽게 조절할 수 있으며, 또한 SQL Agent에는 단지 하나의 작업만 등록하면 됩니다.

 

패키지를 호출하는 패키지를 부모 패키지라 하고, 호출 당하는 패키지를 자식 패키지라 하겠습니다. 부모 패키지는 자식 패키지에게 값을 전달할 수 있으며, 자식 패키지에서는 이 값을 넘겨 받아 사용할 수 있습니다. 예를 들어, 부모 패키지에서 자식 패키지를 호출하면서 자식 패키지 내에 정의된 rundate 라는 변수에 20060807 이라는 값을 설정하여 호출할 수 있습니다. (물론 이와 반대로, 자식 패키지에서 수행된 결과값을 부모 패키지에서 읽어올 수 있는 방법도 있습니다만, 기본적으로 제공되는 방법으로 구현하는 것이 아니라 다른 트릭을 이용하는 방법이기 때문에 추후에 다루도록 하겠습니다.) 부모 패키지가 자식 패키지의 값을 설정하는 방법은 아래 부분에 있는 따라하기를 참고하시기 바랍니다.

 

 

 

패키지 실행 작업

 

패키지 실행 작업DTS 2000 패키지 실행 작업과 비교해 볼 때 단순합니다. 이는 자식 패키지에 전달할 변수를 지정하는 방식이 다르며, 패키지를 호출하는데 이용하는 연결은 연결 관리자에 있는 OLE DB 연결을 이용하기 때문입니다.

 

 

Ÿ           Location – 호출할 패키지가 저장된 형태를 지정합니다.

ú           SQL Server – DB(msdb)에 저장되어 있는 경우, Connection 속성에서 OLE DB 연결을 지정합니다. 이 때, OLE DB msdb를 지정하는 연결일 필요는 없습니다.

ú           파일 시스템 파일 형태(*.dtsx)로 저장된 패키지를 호출하는 경우, Connection 속성에서 파일 연결을 지정합니다.

Ÿ           Connection – 패키지를 호출할 연결을 설정합니다.

Ÿ           PackageName – Location의 값이 SQL Server인 경우, 호출할 패키지를 지정합니다.

Ÿ           Password – 호출할 패키지에 암호가 설정되어 있는 경우, 암호를 지정합니다.

Ÿ           ExecuteOutOfProcess – 패키지를 호출하여 실행할 때, 현재의 프로세스 내에서 실행할 지, 별도의 프로세스를 만들지를 설정합니다. 만약 이 속성값을 true로 설정하게 되면 패키지 호출 시 별도의 dtshost.exe 프로세스가 호출되어 패키지가 실행되며, 부모 패키지와는 별도의 메모리 및 쓰레드를 가지게 됩니다.

 

 

 

DTS 2000 패키지 실행 작업

 

DTS 2000 패키지 실행 작업 SSIS 패키지에서 SQL 2000 DTS 패키지를 호출하는 작업 개체입니다. SQL 2000 DTS 패키지가 복잡하거나 동적 속성 작업, 호환되지 않는 ActiveX 스크립트 작업 등이 포함되어 기존 DTS 패키지를 그대로 사용해야 하는 경우 이 작업 개체를 이용할 수 있습니다.

msdb에 저장되어 있는 패키지를 호출하거나 확장자가 .dts 인 파일 형태로 저장된 패키지 파일을 호출할 수 있습니다. 또한 현재의 SSIS 패키지에 기존 패키지를 포함시켜 수행할 수 있는 옵션도 있습니다.

SQL 2000 DTS 패키지를 사용하기 위해서는 DTS 2000 런타임 엔진이 설치되어 있어야 하며, 다음 링크를 참고하여 설치하시기 바랍니다.

 

 

Ÿ           연결 StorageLocation SQL Server 인 경우에만 나타납니다. DTS 2000 패키지 실행 작업에서는 연결 관리자의 연결을 사용하지 않고 직접 Server 및 패키지를 지정합니다.
SQLServer –
패키지가 저장된 서버를 지정합니다.
AuthentificationMode –
서버의 인증 방식을 설정합니다.
UserName –
인증 방식이 SQL Server 인 경우, 로그온 아이디를 입력합니다.
Password –
인증 방식이 SQL Server인 경우, 로그온 패스워드를 입력합니다.

Ÿ           위치
StorageLocation –
호출할 패키지의 형태를 지정합니다. 구조적 저장소로 선택한 경우에는 패키지가 .dts 인 패키지 파일을 설정해야 하며, 작업에 포함으로 선택한 경우 선택한 패키지가 현재의 SSIS 패키지에 포함됩니다.

Ÿ           일반
Name –
패키지 실행 작업의 이름을 설정합니다.
Description –
패키지 실행 작업의 설명을 설정합니다.

Ÿ           패키지
PackageName –
호출할 패키지 명을 지정합니다.
PackagePassword –
패키지가 암호화 되어 있는 경우, 암호를 입력합니다.
PackageID –
패키지 계보를 나타냅니다. DTS 패키지는 패키지 자체에서 버전 관리가 되기 때문에 동일한 이름의 패키지 이더라도 서로 다른 계보를 가질 수 있습니다.

 

내부 변수와 외부 변수는 SQL 2000 DTS와 동일한 사항입니다. 내부 변수와 외부 변수는 자식 패키지의 속성 값을 설정하는데 이용한다는 공통점이 있습니다. 하지만, 다음과 같은 차이점이 있습니다.

Ÿ           내부 변수 부모 패키지에서 자식 패키지에 대한 변수 값을 지정할 수 있으며, 유형을 변경할 수 있습니다. 하지만, 이러한 값 지정 작업은 정적인 작업으로, 패키지 개발 시점에 고정적으로 지정하는 것이며, 런타임 시 변경되는 값을 할당하기 위해서는 외부 변수를 사용해야 합니다.

Ÿ           외부 변수 부모 패키지의 변수 값을 자식 패키지로 전송할 때 설정합니다.

 

 

 

 

따라하기 – SQL 2005 부모 패키지에서 SQL 2005 자식 패키지를 호출하기 및 변수 전달하기

본 예제에서는 SQL 2005 SSIS 패키지(부모 패키지)에서 또 다른 SQL 2005 SSIS 패키지(자식 패키지)를 호출하는 것과, 부모 패키지에서 자식 패키지에게 변수를 넘기는 작업을 만들어 보겠습니다.

 

1.       BIDS(Business Intelligence Development Studio)를 실행시켜서 빈 Integration Services 프로젝트를 엽니다. (기존의 프로젝트를 계속 사용하여도 됩니다.) 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 자식패키지.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다. 오른 쪽의 속성 창에서 해당 패키지 파일이 어디에 저장되었는지를 확인합니다.
(
필자의 데모 파일은 D:\SSIS\Integration Services 프로젝트1\자식패키지.dtsx 에 저장하였습니다.)

 

2.       제어 흐름 영역에서 마우스 오른쪽 클릭을 하여 나타나는 메뉴 중 변수(S)를 선택한 후, 변수 창에서 Var1 이라는 String형 변수를 하나 추가하고, 값을 자식 패키지라고 지정합니다.



 

3.       도구 상자에서 스크립트 작업을 추가한 후, 스크립트 작업 편집기에서 ReadOnlyVariables 속성에 Var1을 추가합니다. 그리고, 스크립트 디자인(S)을 클릭한 후, 스크립트 작업 편집기 내의 Main() 클래스 내에 다음과 같은 간단한 스크립트를 추가합니다.

    MsgBox(Dts.Variables("Var1").Value)



 

4.       패키지를 저장한 후, 테스트로 수행해 봅니다.




이제 부모 패키지의 변수 값을 받아오는 부분을 설정하겠습니다. 이 부분에서는 SSIS구성 기능을 이용하게 됩니다. 구성은 기본 강좌 후반부에서 자세히 다루도록 하겠습니다.

 

5.       BIDS 상단의 메뉴 중, SSIS(S) à 패키지 구성(C)를 선택합니다.



 

6.       패키지 구성 도우미 창에서 패키지 구성 설정(E)을 체크한 후, 아래에 있는 추가(A) 버튼을 눌러 패키지 구성 마법사를 시작합니다.

 

7.       패키지 구성 마법사에서 구성 유형(T)부모 패키지 변수로 지정하고, 구성 설정을 직접 지정, 부모 변수를 ParentVar1로 지정합니다.



8.       다음을 눌러 대상 속성 선택 창이 나타나면, 개체 부분에서 변수 à Var1 à Properties à Value를 선택합니다.



9.       다음을 눌러 구성 이름을 지정한 후, 구성 설정을 마칩니다.

10.   작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 부모패키지.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

11.   변수 창에서 ParentVar1 이라는 String형 변수를 하나 추가하고, 값을 부모 패키지라고 지정합니다.



12.   도구 상자에서 패키지 실행 작업을 선택하여 제어 흐름에 추가한 후, 패키지 실행 작업 편집기에서 수행할 자식 패키지를 설정합니다.
Location
파일 시스템이며, Connection 속성을 클릭한 후, <새 연결..>을 선택하여 나타나는 파일 연결 관리자 편집기에서 사용 유형기존 파일로 지정하고, 1단계에서 확인한 경로로 자식 패키지 파일을 지정합니다.



13.   패키지를 수행하여 나타나는 메시지를 확인합니다.

 

 

 

 

따라하기 – SQL 2005 부모 패키지에서 SQL 2000 자식 패키지를 호출하기 및 변수 전달하기

 

여기서는 SQL 2005 SSIS 패키지(부모 패키지)에서 SQL 2000 DTS 패키지(자식 패키지)를 호출하는 것과, 부모 패키지에서 자식 패키지에게 변수를 넘기는 작업을 만들어 보겠습니다.

 

1.       SQL 2000 DTS 패키지를 하나 만든 후, DTS 패키지 속성 à 전역 변수 탭에서 DTSVar이라는 String형 변수를 추가하고, 값을 “DTS자식 패키지라고 지정합니다.



2.       ActiveX 스크립트 작업을 하나 추가한 후, 스크립트 부분에 다음과 같은 코드를 추가합니다.

    msgbox DTSGlobalVariables("DTSVar")


3.       확인을 누른 후, 패키지를 SamplePackage1로 저장합니다. (필자의 경우, localhost\ss2000 인스턴스에 저장되었습니다.)

 

4.       BIDS 작업 창의 오른쪽에 있는 솔루션 탐색기 중 SSIS 패키지 부분에서 부모패키지2.dtsx 라는 이름으로 패키지 파일을 하나 추가합니다.

 

5.       변수 창에서 DTSVar 라는 String형 변수를 하나 추가하고, 값을 부모 패키지라고 지정합니다. 이 때, 변수의 이름은 반드시 1단계에서 지정한 이름과 동일해야 합니다. (대소문자 구분)

 

6.       도구 상자에서 DTS 2000 패키지 실행 작업을 선택한 후, 제어 흐름 영역에 추가합니다.

 

7.       DTS 2000 패키지 실행 작업 편집기일반 탭에서 연결 부분을 DTS 패키지가 저장된 서버의 정보로 설정한 후, 아래 부분에 있는 PackageName 부분에 수행할 DTS 패키지를 지정합니다.



8.       외부 변수 탭에서 아래에 있는 새로 만들기(N) 버튼을 클릭한 후, 이름 부분에서 사용자::DTSVar 변수를 설정합니다.



9.       확인을 눌러 창을 닫고 패키지를 실행하여 출력되는 메시지를 확인합니다.



 

 

부모 패키지에서 자식 패키지를 호출하는 방식으로 전체 프로세스를 구축하는 방식은 패키지를 개발하거나 관리할 때 상당히 유용할 수 있습니다. 아무리 복잡한 프로세스 이더라도, 연관 있는 작업들끼리 묶어서 개별 패키지들로 분리한 후, 이런 패키지들을 관리하는 부모 패키지를 만들어 운용하는 것이 여러모로 효과적일 수 있습니다.

SQL 2000 DTS에서 자식 패키지가 부모 패키지로부터 값을 전달받을 때에는 그 역할 설정을 모두 부모 패키지에서 해 주었습니다. 하지만 SQL 2005 SSIS에서는 자식 패키지에서 패키지 구성 기능을 이용하여 이러한 설정을 해 줘야 하며, 부모 패키지에서는 설정을 하지 않습니다

 

 

+ Recent posts