Veri akışı bileşen çalıştırma yöntemleri

Çalıştırma sırasında veri akışı görev bileşenleri dizisini inceler, yürütme planı hazırlar ve iş planı yürütme alt iş parçacığı havuzu yönetir. Görev kaynaklardan veri satırları yükler, onları dönüşümleri ile işler ve sonra bunları hedefe kaydeder.

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

Veri akışı bileşeni, bir alt kümesi yöntemleri yürütme sırasında PipelineComponenttemel sınıf olarak adlandırılan. Yöntemleri ve hangi onlar denir, sıra her zaman aynı dışında olan PrimeOutputve ProcessInputyöntemleri. Bu iki yöntem varlığı ve bir bileşenin yapılandırmasını dayanarak denir IDTSInput100ve IDTSOutput100nesnelerin.

Aşağıdaki listede, hangi bileşen yürütme sırasında çağrıldıklarında sırada yöntemleri gösterir. Dikkat PrimeOutput, çağrıldığında, her zaman önce denir ProcessInput.

PrimeOutput yöntemi

PrimeOutputBir bileşeni en az bir çıkış, bir aşağı akım bileşeni bağlı olduğunda yöntemi olarak adlandırılan bir IDTSPath100nesnesi ve SynchronousInputIDÇıkış özelliği sıfırsa. PrimeOutputYöntemi ile zaman uyumsuz çıkışlarına dönüşümleri ve kaynak bileşenleri için denir. Aksine ProcessInputyöntemi aşağıda açıklanan PrimeOutputbunu gerektiren her bileşen için bir kez yöntemi yalnızca denir

ProcessInput yöntemi

ProcessInputYöntemi en az bir giriş, ters yönde bir bileşen tarafından eklenmiş olan bileşenleri olarak adlandırılan bir IDTSPath100nesnesini. ProcessInputYöntemi için zaman uyumlu çıkışlarına ile dönüşümleri ve hedef bileşenleri denir. ProcessInputters yönde bileşenleri işlemek için daha fazla satır kadar art arda denir.

Girişleri ve çıkışları ile çalışma

Çalıştırma sırasında veri akışı bileşenleri aşağıdaki görevleri gerçekleştirin:

  • Kaynak satırları ekleyin.

  • Zaman uyumlu çıkışlarına dönüşümü bileşenlerle satır kaynağı bileşenleri tarafından sağlanan alırsınız.

  • Zaman uyumsuz çıkışlarına dönüşümü bileşenlerle satır almak ve satır ekleme.

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

Yürütme sırasında veri akışı görev ayırdığı PipelineBufferbileşenleri bir dizi çıktı sütunu koleksiyonları tanımlanan tüm sütunlar içeren nesneleri. Örneğin, her dört bileşen veri akışı sırayla bir çıkış sütunu onun çıkış sütun koleksiyonuna 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 bazen kullanmayın sütunlar içeren arabellekleri alır.

Bileşen değil kullanacağı sütunları bileşeni tarafından alınan arabellekler içerebilir beri bileşenin giriş kullanmak istediğiniz sütunları ve çıktı sütunu koleksiyonları bileşeni için veri akışı görev tarafından sağlanan arabellek bulmanız gerekir. Kullanarak bunu FindColumnByLineageIDyöntemi BufferManagerözellik. Performans nedeniyle, bu görev normalde sırasında gerçekleştirilir PreExecuteyöntemi, yerine de PrimeOutputya ProcessInput.

PreExecuteönce adı verilir PrimeOutputve ProcessInputyöntemleri, ve sonra bu işi gerçekleştirmek için bir bileşen için ilk fırsat BufferManagerbileşene kullanılabilir. Bu yöntemi sırasında bileşen sütunlarından arabellekleri bulun ve sütunları ya da kullanılabilmesi bu bilgileri dahili olarak saklamak PrimeOutputya ProcessInputyöntemleri.

Aşağıdaki kod örneği, nasıl bir dönüşüm bileşeni ile zaman uyumlu çıktı giriş sütunlarından sırasında arabellek bulur gösterir 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);
    }
}
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
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 aşağı akım bileşenleri satır satır ekleyerek PipelineBuffernesnelerin. Veri akışı görev çıktı arabelleği - her bir dizi sağlar IDTSOutput100için bir aşağı akım bileşeni - parametre olarak bağlı olan nesne PrimeOutputyöntemi. Kaynak bileşenleri ve zaman uyumsuz çıkışlarına dönüşümü bileşenlerle ekleme satırları tamponlar ve çağrı SetEndOfRowsetsatırları ekledikten sonra yöntemi. Veri akışı görev çıktı arabelleği, bu bileşenleri sağlar ve bir tampon olarak tam otomatik olarak arabellek satırları sonraki bileşene taşır yönetir. PrimeOutputAksine, bir kez başına bileşeni, yöntemi denir ProcessInputsürekli olarak adlandırılan yöntem.

Aşağıdaki kod örneği, nasıl bir bileşen satırları sırasında kendi çıktı arabelleği ekler gösterilmiştir PrimeOutputsonra yöntemini çağırarak SetEndOfRowsetyöntemi.

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 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
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

Çıkış arabelleği için satır bileşenler geliştirme hakkında daha fazla bilgi için Özel kaynak bileşen geliştirmeve Zaman uyumsuz çıkışlarına ile özel dönüşümü bileşen geliştirme.

Satırları alma

Bileşenleri içinde ters yönde bileşenlerinden satırları almak PipelineBuffernesnelerin. Veri akışı görev sağlar bir PipelineBufferparametre olarak veri akışı ters yönde bileşenleri tarafından eklenen satırlar içeren nesne ProcessInputyöntemi. Bu giriş arabelleği incelemek ve satır ve sütunları arabellekte değiştirmek için kullanılan, ancak satırları eklemek veya kaldırmak için kullanılamaz. ProcessInputYöntemi artık kullanılabilir arabellek kadar art arda denir. Bunun adı, son kez EndOfRowsetözelliği true. Arabellek satır koleksiyonu üzerinde kullanarak yineleyebilirsiniz NextRowyöntemi arabellek sonraki satır ilerler. Bu yöntem döndürür falsearabellek olduğunda son satır koleksiyonu. Kontrol gerekmez EndOfRowsetözelliği sürece sen-si olmak-e sonra veri son satırları başka bir işlem gerçekleştirmek işlenmiş.

Aşağıdaki metni kullanarak doğru deseni gösteren NextRowyöntemi ve EndOfRowsetözelliği:

while (buffer.NextRow())

{

// Do something with each row.

}

if (buffer.EndOfRowset)

{

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

}

Aşağıdaki kod örneği sırasında giriş arabellekleri satırları bir bileşeni nasıl işlediğini gösteren ProcessInputyöntemi.

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 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
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

Giriş arabelleklerindeki satır bileşenler geliştirme hakkında daha fazla bilgi için Özel hedef bileşen geliştirmeve Zaman uyumlu çıkışlarına ile özel dönüşümü bileşen geliştirme.

Integration Services simgesi (küçük) Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration ServicesMSDN sayfası:


Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.

Ayrıca bkz.

Kavramlar

Bileşen tasarım zamanı yöntemleri bir veri akışı