다음을 통해 공유


데이터 흐름 구성 요소의 런타임 메서드

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

런타임에 데이터 흐름 태스크는 구성 요소 시퀀스를 검사하고 실행 계획을 준비하며 작업 계획을 실행하는 작업자 스레드 풀을 관리합니다. 태스크는 원본에서 데이터 행을 로드하고 변환을 통해 처리한 다음 대상에 저장합니다.

메서드 실행 시퀀스

데이터 흐름 구성 요소를 실행하는 동안 기본 클래스의 메서드 PipelineComponent 하위 집합이 호출됩니다. 메서드와 메서드가 호출되는 시퀀스는 메서드와 ProcessInput 메서드를 제외하고 PrimeOutput 항상 동일합니다. 이러한 두 메서드는 구성 요소 IDTSInput100 IDTSOutput100 와 개체의 존재 및 구성에 따라 호출됩니다.

다음 목록에서는 구성 요소 실행 중에 메서드가 호출되는 순서대로 메서드를 보여 줍니다. 호출 시 PrimeOutput항상 앞에 ProcessInput호출됩니다.

PrimeOutput 메서드

PrimeOutput 이 메서드는 구성 요소에 하나 이상의 출력이 있고 개체를 통해 IDTSPath100 다운스트림 구성 요소에 연결되고 SynchronousInputID 출력의 속성이 0이면 호출됩니다. 이 PrimeOutput 메서드는 소스 구성 요소 및 비동기 출력이 있는 변환에 대해 호출됩니다. 아래에 설명된 ProcessInput 메서드와 달리 PrimeOutput 메서드는 해당 메서드가 필요한 각 구성 요소에 대해 한 번씩만 호출됩니다.

ProcessInput 메서드

ProcessInput 메서드는 IDTSPath100 개체를 통해 업스트림 구성 요소에 연결된 하나 이상의 입력이 있는 구성 요소에 대해 호출됩니다. 이 ProcessInput 메서드는 대상 구성 요소 및 동기 출력이 있는 변환에 대해 호출됩니다. ProcessInput 는 업스트림 구성 요소에서 처리할 행이 더 이상 없을 때까지 반복적으로 호출됩니다.

입력 및 출력 작업

런타임에 데이터 흐름 구성 요소는 다음 작업을 수행합니다.

  • 원본 구성 요소가 행을 추가합니다.

  • 동기 출력이 있는 변환 구성 요소는 원본 구성 요소에서 제공하는 행을 받습니다.

  • 비동기 출력이 있는 변환 구성 요소는 행을 수신하고 행을 추가합니다.

  • 대상 구성 요소가 행을 받은 다음 대상으로 로드합니다.

실행하는 동안 데이터 흐름 태스크는 구성 요소 시퀀스의 출력 열 컬렉션에 정의된 모든 열을 포함하는 개체를 할당 PipelineBuffer 합니다. 예를 들어 데이터 흐름 시퀀스의 4개 구성 요소 각각이 출력 열 컬렉션에 하나의 출력 열을 추가하는 경우 각 구성 요소에 제공되는 버퍼에는 구성 요소당 각 출력 열에 대해 하나씩 4개의 열이 포함됩니다. 이 동작으로 인해 구성 요소는 사용하지 않는 열이 포함된 버퍼를 받는 경우가 있습니다.

구성 요소에서 받은 버퍼에는 구성 요소가 사용하지 않는 열이 포함될 수 있으므로 데이터 흐름 태스크에서 구성 요소에 제공된 버퍼의 구성 요소 입력 및 출력 열 컬렉션에서 사용할 열을 찾아야 합니다. 이 작업은 속성의 메서드를 FindColumnByLineageID 사용하여 수행합니다 BufferManager . 성능상의 이유로 이 작업은 일반적으로 메서드에서 또는 ProcessInput에 있는 PrimeOutput 작업이 아닌 메서드 중에 PreExecute 수행됩니다.

PreExecute는 메서드와 ProcessInput 메서드 앞에 PrimeOutput 호출되며 구성 요소가 구성 요소에서 사용할 수 있게 된 후 BufferManager 이 작업을 수행할 수 있는 첫 번째 기회입니다. 이 메서드가 실행될 때 구성 요소는 버퍼에서 해당 구성 요소의 열을 찾고 PrimeOutput 또는 ProcessInput 메서드에서 해당 열을 사용할 수 있도록 이 정보를 내부에 저장해야 합니다.

다음 코드 예제에서는 동기 출력이 있는 변환 구성 요소가 버 PreExecute퍼에서 입력 열을 찾는 방법을 보여 줍니다.

private int []bufferColumnIndex;  
public override void PreExecute()  
{  
    IDTSInput100 input = ComponentMetaData.InputCollection[0];  
    bufferColumnIndex = new int[input.InputColumnCollection.Count];  
  
    for( int x=0; x < input.InputColumnCollection.Count; x++)  
    {  
        IDTSInputColumn100 column = input.InputColumnCollection[x];  
        bufferColumnIndex[x] = BufferManager.FindColumnByLineageID( input.Buffer, column.LineageID);  
    }  
}  
Dim bufferColumnIndex As Integer()  
  
    Public Overrides Sub PreExecute()  
  
        Dim input As IDTSInput100 = ComponentMetaData.InputCollection(0)  
  
        ReDim bufferColumnIndex(input.InputColumnCollection.Count)  
  
        For x As Integer = 0 To input.InputColumnCollection.Count  
  
            Dim column As IDTSInputColumn100 = input.InputColumnCollection(x)  
            bufferColumnIndex(x) = BufferManager.FindColumnByLineageID(input.Buffer, column.LineageID)  
  
        Next  
  
    End Sub  

행 추가

구성 요소에서는 PipelineBuffer 개체에 행을 추가하는 방법으로 다운스트림 구성 요소에 행을 제공합니다. 데이터 흐름 태스크는 다운스트림 구성 요소에 연결된 각 IDTSOutput100 개체에 대해 하나씩 출력 버퍼 배열을 메서드에 PrimeOutput 대한 매개 변수로 제공합니다. 비동기 출력이 있는 원본 구성 요소 및 변환 구성 요소는 버퍼에 행을 추가하고 행 추가가 SetEndOfRowset 완료되면 메서드를 호출합니다. 데이터 흐름 태스크는 구성 요소에 제공하는 출력 버퍼를 관리하고 버퍼가 가득 차면 버퍼의 행을 다음 구성 요소로 자동으로 이동합니다. PrimeOutput 메서드는 반복적으로 호출되는 ProcessInput 메서드와 달리 구성 요소마다 한 번씩 호출됩니다.

다음 코드 예에서는 구성 요소에서 PrimeOutput 메서드 실행 중 출력 버퍼에 행을 추가한 다음 SetEndOfRowset 메서드를 호출하는 방법을 보여 줍니다.

public override void PrimeOutput( int outputs, int []outputIDs,PipelineBuffer []buffers)  
{  
    for( int x=0; x < outputs; x++ )  
    {  
        IDTSOutput100 output = ComponentMetaData.OutputCollection.GetObjectByID( outputIDs[x]);  
        PipelineBuffer buffer = buffers[x];  
  
        // TODO: Add rows to the output buffer.  
    }  
    foreach( PipelineBuffer buffer in buffers )  
    {  
        /// Notify the data flow task that no more rows are coming.  
        buffer.SetEndOfRowset();  
    }  
}  
public overrides sub PrimeOutput( outputs as Integer , outputIDs() as Integer ,buffers() as PipelineBuffer buffers)  
  
    For x As Integer = 0 To outputs.MaxValue  
  
        Dim output As IDTSOutput100 = ComponentMetaData.OutputCollection.GetObjectByID(outputIDs(x))  
        Dim buffer As PipelineBuffer = buffers(x)  
  
        ' TODO: Add rows to the output buffer.  
  
    Next  
  
    For Each buffer As PipelineBuffer In buffers  
  
        ' Notify the data flow task that no more rows are coming.  
        buffer.SetEndOfRowset()  
  
    Next  
  
End Sub  

출력 버퍼 에 행을 추가하는 구성 요소를 개발하는 방법에 대한 자세한 내용은 사용자 지정 원본 구성 요소 개발 및 비동기 출력을 사용하여 사용자 지정 변환 구성 요소 개발을 참조하세요.

파일 받기

구성 요소는 개체의 업스트림 구성 요소에서 행을 받습니다 PipelineBuffer . 데이터 흐름 태스크는 업스트림 구성 요소에 의해 데이터 흐름에 추가된 행을 메서드에 대한 매개 변수로 포함하는 개체를 ProcessInput 제공합니다PipelineBuffer. 이 입력 버퍼를 사용하여 버퍼의 행 및 열을 검사하거나 수정할 수 있지만 행을 추가하거나 제거할 수는 없습니다. ProcessInput 사용 가능한 버퍼가 더 이상 없을 때까지 메서드가 반복적으로 호출됩니다. 마지막으로 호출되면 속성이 EndOfRowset true입니다. 버퍼를 다음 행으로 진행하는 메서드를 사용하여 NextRow 버퍼의 행 컬렉션을 반복할 수 있습니다. 버퍼가 컬렉션의 마지막 행에 있으면 이 메서드에서 false를 반환합니다. 데이터의 마지막 행이 EndOfRowset 처리된 후 추가 작업을 수행해야 하는 경우가 아니면 속성을 확인할 필요가 없습니다.

다음 텍스트는 메서드 및 속성을 사용하기 NextRow 위한 올바른 패턴을 보여 줍니다 EndOfRowset .

while (buffer.NextRow())

{

// Do something with each row.

}

if (buffer.EndOfRowset)

{

// Optionally, do something after all rows have been processed.

}

다음 코드 예에서는 구성 요소에서 ProcessInput 메서드 실행 중 입력 버퍼의 행을 처리하는 방법을 보여 줍니다.

public override void ProcessInput( int inputID, PipelineBuffer buffer )  
{  
    {  
        IDTSInput100 input = ComponentMetaData.InputCollection.GetObjectByID(inputID);  
        while( buffer.NextRow())  
        {  
            // TODO: Examine the columns in the current row.  
        }  
}  
Public Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer)  
  
        Dim input As IDTSInput100 = ComponentMetaData.InputCollection.GetObjectByID(inputID)  
        While buffer.NextRow() = True  
  
            ' TODO: Examine the columns in the current row.  
        End While  
  
End Sub  

입력 버퍼에서 행을 수신하는 구성 요소를 개발하는 방법에 대한 자세한 내용은 사용자 지정 대상 구성 요소 개발 및 동기 출력을 사용하여 사용자 지정 변환 구성 요소 개발을 참조하세요.

참고 항목

데이터 흐름 구성 요소의 디자인 타임 메서드