Betik Bileşeni ile Hata Çıktısının İyileştirilmesi

Şunlar için geçerlidir:SQL Server Azure Data Factory'de SSIS Tümleştirme Çalışma Zamanı

Varsayılan olarak, Entegrasyon Hizmetleri hata çıktısındaki iki ek sütun olan ErrorCode ve ErrorColumn, yalnızca hata sayısını ve hatanın gerçekleştiği sütunun kimliğini temsil eden sayısal kodlar içerir. Bu sayısal değerler, ilgili hata tanımı ve sütun adı olmadan sınırlı kullanılabilir.

Bu konu, Script bileşeni kullanılarak veri akışındaki mevcut hata çıktı verilerine hata tanımı ve sütun adının nasıl ekleneceğini açıklar. Örnek, arayüz yöntemini kullanarak belirli bir önceden tanımlanmış Entegrasyon Hizmetleri hata GetErrorDescription koduna karşılık gelen hata tanımını, Script bileşeninin özelliği sayesinde erişilebilir ComponentMetaData olan arayüz yöntemini IDTSComponentMetaData100 ekler. Sonra örnek, aynı arayüz yöntemini kullanarak yakalanan soy kimliğine GetIdentificationStringByID karşılık gelen sütun adını ekler.

Note

Birden fazla Veri Akışı görevi ve birden fazla paket arasında daha kolay yeniden kullanabileceğiniz bir bileşen oluşturmak istiyorsanız, bu Script bileşen örneğindeki kodu özel bir data flow bileşeni için başlangıç noktası olarak kullanmayı düşünün. Daha fazla bilgi için bkz. Özel Veri Akışı Bileşeni Geliştirme.

Example

Burada gösterilen örnek, veri akışındaki mevcut hata çıkış verilerine hata tanımı ve sütun adını eklemek için dönüşüm olarak yapılandırılmış bir Script bileşeni kullanır.

Script bileşeninin veri akışında dönüşüm olarak nasıl dönüştürüleceği hakkında daha fazla bilgi için Script Bileşeni ile Senkron Dönüşüm Oluşturma ve Script Bileşeni ile Asenkron Dönüşüm Oluşturma bölümlerine bakınız.

Bu Script Bileşeni örneğini yapılandırmak için

  1. Yeni Script bileşenini oluşturmadan önce, veri akışında bir üst akış bileşenini hata çıktısına yönlendirecek şekilde yapılandırın. Test amaçları için, hataların oluşmasını sağlayacak şekilde bir bileşeni yapılandırmak isteyebilirsiniz—örneğin, iki tablo arasında bir Lookup dönüşümü yapılandırarak ve arama başarısız olur.

  2. Veri Akışı tasarımcı yüzeyine yeni bir Script bileşeni ekleyin ve bunu dönüşüm olarak yapılandırın.

  3. Yukarı akış bileşeninden gelen hata çıkışını yeni Script bileşenine bağlayın.

  4. Script Transformation Edit'i açın ve ScriptLanguage özelliği için Script sayfasında script dilini seçin.

  5. Edit Script'e tıklayarak Microsoft Visual Studio Apps for Applications (VSTA) IDE'sini açın ve aşağıda gösterilen örnek kodu ekleyin.

  6. VSTA'yı kapat.

  7. Script Transformation Editörü'nde, Input Columns sayfasında ErrorCode ve ErrorColumn sütunlarını seçin.

  8. Girişler ve Çıkışlar sayfasına iki yeni sütun ekleyin.

    • ErrorDescription adlı yeni bir çıkış sütunu ekleyin, String türünde. Uzun mesajları desteklemek için yeni sütunun varsayılan uzunluğunu 255'e çıkarın.

    • ColumnName adlı yeni bir çıkış sütunu ekleyin, String türünde. Uzun değerleri desteklemek için yeni sütunun varsayılan uzunluğunu 255'e çıkarın.

  9. Script Transformation Editörü'nü kapatın.

  10. Script bileşeninin çıktısını uygun bir hedefe bağlayın. Düz Dosya hedefi, ad hoc test için yapılandırması en kolay olanıdır.

  11. Paketi çalıştırın.

Public Class ScriptMain      ' VB
    Inherits UserComponent
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        Row.ErrorDescription = _
            Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)

        Dim componentMetaData130 = TryCast(Me.ComponentMetaData, IDTSComponentMetaData130)

        If componentMetaData130 IsNot Nothing Then

            If Row.ErrorColumn = 0 Then
                ' 0 means no specific column is identified by ErrorColumn, this time.
                Row.ColumnName = "Check the row for a violation of a foreign key constraint."
            ELSE If Row.ErrorColumn = -1 Then
                ' -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables."
            Else
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn)
            End If
        End If
    End Sub
End Class
public class ScriptMain:      // C#
    UserComponent
{
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);

        var componentMetaData130 = this.ComponentMetaData as IDTSComponentMetaData130;
        if (componentMetaData130 != null)
        {
            // 0 means no specific column is identified by ErrorColumn, this time.
            if (Row.ErrorColumn == 0)
            {
                Row.ColumnName = "Check the row for a violation of a foreign key constraint.";
            }
            // -1 means you are using Table Lock for a Memory Optimised destination table which is not supported.
            else if (Row.ErrorColumn == -1)
            {
                Row.ColumnName = "Table lock is not compatible with Memory Optimised tables.";
            }
            else
            {
                Row.ColumnName = componentMetaData130.GetIdentificationStringByID(Row.ErrorColumn);
            }
        }
    }
}