Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure Data Factory'de SSIS Tümleştirme Çalışma Zamanı
Script Bileşenini Kodlama ve Hata Hata Alma bölümünde tartışıldığı üzere, Script bileşeni projesi üç proje öğesi içerir:
ScriptMain öğesi, kodunuzu yazdığınız ScriptMain sınıfını içerir. ScriptMain sınıfı, UserComponent sınıfından miras alır.
ComponentWrapper öğesi, UserComponent sınıfını içerir; ScriptComponent bu sınıfın bir örneği, verileri işlemek ve paketle etkileşim kurmak için kullanacağınız yöntemleri ve özellikleri içerir. ComponentWrapper öğesi ayrıca Connections ve Variables koleksiyon sınıflarını da içerir.
BufferWrapper öğesi, her giriş ve çıktı için miras ScriptBuffer alan sınıfları ve her sütun için tiplenen özellikleri içerir.
Kodunuzu ScriptMain öğesinde yazarken, bu konuda tartışılan nesneleri, yöntemleri ve özellikleri kullanacaksınız. Her bileşen burada listelenen tüm yöntemleri kullanmaz; ancak kullanıldıklarında, gösterilen dizide kullanılırlar.
Temel sınıf, ScriptComponent bu konuda tartışılan yöntemler için herhangi bir uygulama kodu içermez. Bu nedenle, yöntemin kendi uygulamanıza temel sınıf uygulamasına bir çağrı eklemek gereksizdir ama zararsızdır.
Bu sınıfların yöntemleri ve özellikleri belirli bir Script bileşeni türünde nasıl kullanılacağı hakkında bilgi için Ek Script Bileşeni Örnekleri bölümüne bakınız. Örnek konular ayrıca tam kod örnekleri içerir.
AcquireConnections Yöntemi
Kaynaklar ve hedefler genellikle harici bir veri kaynağına bağlanmalıdır. Bağlantıyı veya bağlantı bilgilerini uygun bağlantı yöneticisinden almak için temel sınıfın metodunu ScriptComponent geçersiz AcquireConnections kılın.
Aşağıdaki örnek, bir ADO.NET bağlantı yöneticisinden System.Data.SqlClient.SqlConnection dosyasını döndürür.
Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
connMgr = Me.Connections.MyADONETConnection
sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)
End Sub
Aşağıdaki örnek, Flat File Bağlantı Yöneticisi'dan tam bir yol ve dosya adını döndürür ve ardından dosyayı System.IO.StreamReader kullanarak açar.
Private textReader As StreamReader
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
Dim connMgr As IDTSConnectionManager100 = _
Me.Connections.MyFlatFileSrcConnectionManager
Dim exportedAddressFile As String = _
CType(connMgr.AcquireConnection(Nothing), String)
textReader = New StreamReader(exportedAddressFile)
End Sub
PreExecute Yöntemi
Veri satırlarını işlemeye başlamadan önce sadece bir kez yapmanız gereken işleme olduğunda, temel sınıfın ScriptComponent yöntemini PreExecute geçersiz kılın. Örneğin, bir hedefte, hedefin veri kaynağına her satırı eklemek için kullanacağı parametreli komutu yapılandırmak isteyebilirsiniz.
Dim sqlConn As SqlConnection
Dim sqlCmd As SqlCommand
Dim sqlParam As SqlParameter
...
Public Overrides Sub PreExecute()
sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
"VALUES(@addressid, @city)", sqlConn)
sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
sqlCmd.Parameters.Add(sqlParam)
sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
sqlCmd.Parameters.Add(sqlParam)
End Sub
SqlConnection sqlConn;
SqlCommand sqlCmd;
SqlParameter sqlParam;
public override void PreExecute()
{
sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn);
sqlParam = new SqlParameter("@addressid", SqlDbType.Int);
sqlCmd.Parameters.Add(sqlParam);
sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);
sqlCmd.Parameters.Add(sqlParam);
}
Giriş ve Çıktıların İşlemlenmesi
Girdilerin İşlemlenmesi
Dönüşüm veya hedef olarak yapılandırılan script bileşenlerinin tek bir girdisi vardır.
BufferWrapper Project Öğesi Ne Sağlar
Yapılandırdığınız her girdi için, BufferWrapper proje öğesi, girdiden ScriptBuffer türeden ve girdiyle aynı isme sahip bir sınıf içerir. Her giriş tamponu sınıfı aşağıdaki özellikleri, fonksiyonları ve yöntemleri içerir:
Her seçilen giriş sütunu için adlandırılmış, tiplenmiş accessor özellikleri. Bu özellikler, Script Transformation Editor'unGiriş Sütunları sayfasındaki sütun için belirtilen Kullanım Türü'ne bağlı olarak yalnızca okunabilir veya okuma/yazma özelliğine bağlıdır.
Her seçilen giriş sütunu için bir<> sütun_IsNull özelliği. Bu özellik, sütun için belirtilen Kullanım Türü'ne bağlı olarak yalnızca okunabilir veya okuma/yazma özelliğine de sahiptir.
Her yapılandırılmış çıktı için bir DirectRowTo<çıkış tamponu> yöntemi. Bu yöntemleri, aynı Dışlama Grubu'ndaki birkaç çıktıdan birine satır filtrelerken kullanacaksınız.
NextRow fonksiyonu bir sonraki giriş satırını almak için ve son veri tamponunun işlenip işlemediğini belirlemek için EndOfRowset fonksiyonu. UserComponent temel sınıfında uygulanan giriş işleme yöntemlerini kullandığınızda genellikle bu fonksiyonlara ihtiyacınız olmaz. Sonraki bölüm UserComponent temel sınıfı hakkında daha fazla bilgi verir.
ComponentWrapper Project Öğesi Ne Sağlar
ComponentWrapper proje öğesi, 'den ScriptComponenttüreden UserComponent adlı bir sınıf içerir. Özel kodunuzu yazdığınız ScriptMain sınıfı ise UserComponent'ten türemiştir. UserComponent sınıfı aşağıdaki yöntemleri içerir:
ProcessInput yönteminin geçersiz edilmiş bir uygulaması. Bu, veri akış motorunun PreExecute metodundan sonra çalışma zamanında bir sonraki çağrısını yaptığı yöntemdir ve birden fazla kez çağrılabilir. ProcessInput, işlemeyi inputbuffer<>_ProcessInput yöntemine devreder. Daha sonra ProcessInput yöntemi giriş tamponunun sonunu kontrol eder ve tamponun sonuna ulaşıldıysa, geçersiz FinishOutputs metodunu ve özel MarkOutputsAsFinished metodunu çağırır. MarkOutputsAsFinished yöntemi ise son çıktı tamponunda SetEndOfRowset'i çağırır.
Inputbuffer_ProcessInput yönteminin geçersiz uygulanabilir <bir uygulaması.> Bu varsayılan uygulama her giriş satırını döngüye alır ve inputbuffer>_ProcessInputRow çağırır<.
Inputbuffer>_ProcessInputRow metodunun< geçersiz uygulanabilir bir uygulaması. Varsayılan uygulama boş. Bu, genellikle özel veri işleme kodunuzu yazmak için geçersiz bırakacağınız yöntemdir.
Özel Kodunuz Ne Yapmalı
ScriptMain sınıfında girdiyi işlemek için aşağıdaki yöntemleri kullanabilirsiniz:
Override< inputbuffer>_ProcessInputRow her giriş satırındaki veriyi geçerken işlemek.
Girişi< tamponu> devre edin_ProcessInput sadece giriş sıraları arasında döngü yaparken ek bir şey yapmanız gerekiyorsa. (Örneğin, tüm satırlar işlendikten sonra EndOfRowset'in başka bir işlem yapmasını test etmeniz gerekir.) Satır işleme işlemi için giriş_ProcessInputRow tamponu> çağırın<.
Çıkışlar kapanmadan önce bir şey yapmak zorundaysan FinishOutputs'u geçersiz kıl.
ProcessInput yöntemi, bu yöntemlerin uygun zamanlarda çağrılmasını sağlar.
İşleme Çıktıları
Kaynak veya dönüşüm olarak yapılandırılan script bileşenleri bir veya daha fazla çıktıya sahiptir.
BufferWrapper Project Öğesi Ne Sağlar
Yapılandırdığınız her çıktı için, BufferWrapper proje öğesi, çıktıdan ScriptBuffer türemiş ve çıktıyla aynı isme sahip bir sınıf içerir. Her giriş tamponu sınıfı aşağıdaki özellikleri ve yöntemleri içerir:
Her çıktı sütunu için adlandırılmış, yazılmış, yalnızca yazılabilir erişim özellikleri.
Her seçilen çıktı sütunu için sadece yazılabilir< bir sütun>_IsNull özelliği ve sütun değerini null olarak ayarlayabilirsiniz.
Boş yeni bir satır eklemek için çıktı tamponuna bir AddRow yöntemi.
Veri akışı motoruna artık veri tamponları beklenmediğini bildiren bir SetEndOfRowset yöntemi. Ayrıca, mevcut tamponun son veri tamponu olup olmadığını belirlemek için bir EndOfRowset fonksiyonu da vardır. UserComponent temel sınıfında uygulanan giriş işleme yöntemlerini kullandığınızda genellikle bu fonksiyonlara ihtiyacınız olmuyor.
ComponentWrapper Project Öğesi Ne Sağlar
ComponentWrapper proje öğesi, 'den ScriptComponenttüreden UserComponent adlı bir sınıf içerir. Özel kodunuzu yazdığınız ScriptMain sınıfı ise UserComponent'ten türemiştir. UserComponent sınıfı aşağıdaki yöntemleri içerir:
PrimeOutput yönteminin geçersiz bir uygulaması. Veri akışı motoru, bu yöntemi çalıştırma zamanında ProcessInput'tan önce çağırır ve sadece bir kez çağrılır. PrimeOutput , işlemi CreateNewOutputRows yöntemine devreder. Sonra, bileşen bir kaynaksa (yani bileşenin girdisi yoksa), PrimeOutput geçersiz FinishOutputs metodunu ve özel MarkOutputsAsFinished yöntemini çağırır. MarkOutputsAsFinished yöntemi, son çıkış tamponunda SetEndOfRowset'i çağırır.
CreateNewOutputRows metodunun geçersiz bir uygulaması. Varsayılan uygulama boş. Bu, genellikle özel veri işleme kodunuzu yazmak için geçersiz bırakacağınız yöntemdir.
Özel Kodunuz Ne Yapmalı
ScriptMain sınıfında çıktıları işlemek için aşağıdaki yöntemleri kullanabilirsiniz:
CreateNewOutputRows'u yalnızca giriş satırlarını işlemeden önce çıktı satırlarını ekleyip doldurabildiğinizde geçersiz kılın. Örneğin, bir kaynakta CreateNewOutputRows kullanabilirsiniz, ancak asenkron çıktılarla yapılan bir dönüşümde, giriş verilerinin işlenmesi sırasında veya sonrasında AddRow çağırılmalıdır.
Çıkışlar kapanmadan önce bir şey yapmak zorundaysan FinishOutputs'u geçersiz kıl.
PrimeOutput yöntemi, bu yöntemlerin uygun zamanlarda çağrılmasını sağlar.
PostExecute Yöntemi
Veri satırlarını işledikten sonra sadece bir kez yapmanız gereken işlem olduğunda, temel sınıfın ScriptComponent yöntemini PostExecute geçersiz kılın. Örneğin, bir kaynakta, veri akışına veri yüklemek için kullandığınız System.Data.SqlClient.SqlDataReader dosyasını kapatmak isteyebilirsiniz.
Important
ReadWriteVariables koleksiyonu yalnızca PostExecute yönteminde mevcuttur. Bu nedenle, her veri satırını işlerken bir paket değişkeninin değerini doğrudan artıramazsınız. Bunun yerine, yerel değişkenin değerini artırın ve tüm veriler işlendikten sonra PostExecute yönteminde paket değişkeninin değerini yerel değişkenin değerine ayarlayın.
ReleaseConnections Yöntemi
Kaynaklar ve hedefler genellikle harici bir veri kaynağına bağlanmalıdır. Temel sınıfın ScriptComponent metodunu ReleaseConnections geçersiz kılarak daha önce AcquireConnections açtığınız bağlantıyı kapatıp serbest bırakın.
Dim connMgr As IDTSConnectionManager100
...
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
IDTSConnectionManager100 connMgr;
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}