Aracılığıyla paylaş


Bileşen çalıştırma yöntemleri bir veri akışı

Çalışma sırasında saat, veri akışı görevi bileşenlerin sırasını denetler, yürütmek planı hazırlar ve iş planını yürütmek çalışan iş parçacığı havuzu yönetir.Görev kaynaklardan veri yükler, bunların arasında dönüşüm işler ve bunları hedefe kaydeder.

Yöntem yürütme sırası

Bir veri akışı bileşeni alt küme küme küme kümesini yöntemleri yürütülmesi sırasındaPipelineComponenttemel sınıf olarak adlandırılan., Bunlar verilir, sıralama ve yöntemleri her zaman aynı dışında olanPrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])veProcessInput(Int32, PipelineBuffer)yöntemleri.Bu iki yöntem var ve bir bileşenin yapılandırmasını verilirIDTSInput100veIDTSOutput100nesneler.

Aşağıdaki liste, bileşen yürütülürken adlandırılırlar sırada yöntemleri gösterir.UnutmayınPrimeOutput(Int32, array<Int32[], array<PipelineBuffer[]), çağrıldığında, önce her zaman adlıProcessInput(Int32, PipelineBuffer).

  • AcquireConnections(Object)

  • Validate()

  • ReleaseConnections()

  • PrepareForExecute()

  • AcquireConnections(Object)

  • PreExecute()

  • PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])

  • ProcessInput(Int32, PipelineBuffer)

  • PostExecute()

  • ReleaseConnections()

  • Cleanup()

PrimeOutput yöntem

The PrimeOutput(Int32, Int32%, IDTSBuffer100%) method is called when a component has at least one output, attached to a downstream component through an IDTSPath100 object, and the SynchronousInputID() property of the output is zero.The PrimeOutput(Int32, Int32%, IDTSBuffer100%) method is called for source components and for transformations with asynchronous outputs.Farklı olarakProcessInput(Int32, PipelineBuffer)yöntemi aşağıda,PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])yöntem her bileşen için it. gerektiren bir kez yalnızca verilir

ProcessInput yöntem

The ProcessInput(Int32, IDTSBuffer100) method is called for components that have at least one input attached to an upstream component by an IDTSPath100 object.The ProcessInput(Int32, IDTSBuffer100) method is called for destination components and for transformations with synchronous outputs.ProcessInput(Int32, PipelineBuffer) is called repeatedly until there are no more rows to process from upstream components.

Giriş ve çıkışları

Çalışma zamanında veri akışı bileşenleri aşağıdaki görevleri gerçekleştirin:

  • Kaynak satırları ekleyin.

  • Satır kaynağı bileşenleri tarafından sağlanan eş zamanlı çıkış dönüştürme bileşenlerle alırsınız.

  • Çıkış zaman uyumsuz dönüştürme bileşenleri, satırları alır ve satır ekleme.

  • Hedef bileşenleri satır almak ve sonra bunları bir hedef yükleyin.

Yürütme sırasında görev veri akışı ayırır.PipelineBuffernesneleri içeren bir dizi çıktı sütun koleksiyonu tanımlanmış tüm sütunlar bileşenlerinin.Örneğin, bir veri akışı sıra dört bileşenlerinin her biri bir sütun, çıktı sütun koleksiyonuna çıktı ekler, her bileşen için sağlanan arabellek her çıktı sütunu her bileşen için dört sütun içerir.Bu davranış nedeniyle, bir bileşen tarafından kullanılmayan bir sütun içeren bir arabellek bazen alır.

Bileşen değil kullanacağı sütunlar yaptığınız bileşen tarafından alınan arabellekler içerebilir bu yana, bileşenin giriş kullanmak istediğiniz sütunları ve koleksiyon bileşeni için veri akışı görevi tarafından sağlanan arabellek, çıktı sütun bulmalısınız.Kullanarak bunuFindColumnByLineageID(Int32, Int32)yöntem,BufferManager()özellik.Performansla ilgili nedenlerden dolayı bu görevi genellikle sırasında gerçekleştirilenPreExecute()yöntem yerine,PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])orProcessInput(Int32, PipelineBuffer).

PreExecute()önce adı verilenPrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])veProcessInput(Int32, PipelineBuffer)yöntemini ve sonra bu işi yapmak bir bileşen için ilk fırsatıBufferManager()kullanılabilir bileşen.Bu yöntem sırasında bileşen sütunlarını arabellek bulun ve sütunları ya da kullanılacak şekilde bu bilgileri dahili olarak depolamaPrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])orProcessInput(Int32, PipelineBuffer)yöntemleri.

Aşağıdaki kod örneği, nasıl bir zaman uyumlu bir çıkış dönüştürme bileşeni bulur sırasında arabellekte giriş sütunlarını gösterirPreExecute().

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

Satır ekleme

Bileşenleri tedarik satır satır ekleyerek aşağı akım bileşenleriPipelineBuffernesneler.Veri akışı görevi çıktı arabelleği - her biri bir dizi sağlarIDTSOutput100parametre olarak bir aşağı akım bileşenine - bağlı nesnePrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])yöntem.Kaynak bileşenleri ve çıkış zaman uyumsuz dönüştürme bileşenleri ekleme satır arabellek ve arama içinSetEndOfRowset()yöntem, bulundukları tamamlanmış ekleme satırı.Veri akışı görevi, bu bileşenleri sağlayan ve arabellek olduğunda tam, otomatik olarak satırlara arabellekte sonraki bileşene taşır çıktı arabelleği yönetir.The PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[]) method is called one time per component, unlike the ProcessInput(Int32, PipelineBuffer) method, which is called repeatedly.

Nasıl sırasında çıktı arabelleği için satır bir bileşen ekler, aşağıdaki kod örneği gösterenPrimeOutput(Int32, array<Int32[], array<PipelineBuffer[])sonra yöntemini çağırarakSetEndOfRowset()yöntem.

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

Çıktı arabelleği, satır eklemek bileşenler geliştirme hakkında daha fazla bilgi için bkz:Özel bir kaynak bileşen geliştirmeveZaman uyumsuz çıkışlarını ile özel bir dönüştürme bileşen geliştirme.

Satırlar alma

Bileşenleri ters yönde bileşen satırlarını almaPipelineBuffernesneler.veri akışı görevi sağlayan birPipelineBufferveri akışı için bir parametresi olarak ters yönde bileşenleri tarafından eklenen satır içeren nesneProcessInput(Int32, PipelineBuffer)yöntem.Bu giriş arabelleği incelemek ve satır ve sütunları arabellekte için kullanılabilir, ancak satır ekleyip kullanılamaz.The ProcessInput(Int32, PipelineBuffer) method is called repeatedly until there are no more available buffers.Olarak da adlandırılan, son kezEndOfRowset()özelliktrue.Arabellek satırları topluluğu içinde kullanarak yineleyebilirsinizNextRow()yöntem, doğru ilerler, arabellek sonraki satır.Bu yöntem döndürürfalsearabellek değil son satırdaki koleksiyon.Denetlemek zorundaEndOfRowset()özellik veri son satırları sonra başka bir işlem gerçekleştirmek yoksa işlenen.

Aşağıdaki metni kullanmak için doğru deseni gösterenNextRow()yöntem,EndOfRowset()özellik:

(buffer.NextRow())

{

/ / Olan her satır bir şey yapın.

}

(buffer.EndOfRowset)

{

/ / Tüm satırlar işlenmiş sonra isteğe bağlı olarak, bir şey yapın.

}

Aşağıdaki kod örneği, bir bileşen sırasında giriş arabelleği satırları nasıl işlediğini gösterirProcessInput(Int32, PipelineBuffer)yöntem.

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

Bileşenler, giriş arabelleği satırları almak geliştirme hakkında daha fazla bilgi için bkz:Bir Özel hedef bileşen geliştirmeveZaman uyumlu çıkışlarını ile özel bir dönüştürme bileşen geliştirme.

Integration Services icon (small)tümleştirme Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler, Microsoft Office 2010 Suite gelen video yanı sıra, seçilen topluluk çözümleri için ziyaret edin veIntegration ServicesMSDN veya TechNet sayfa:

Bu güncelleştirmeler otomatik bildirilmesi için sayfanın RSS akışlarını için abone olmak olun.