Zaman uyumsuz bir dönüştürme komut dosyası bileşeni ile oluşturma
Bir dönüştürme bileşenini kullanan veri akışı, bir Integration Services Paket, değiştirmek ve kaynaktan hedef geçerken, verileri çözümlemek için. Bileşeni geçerken dönüştürme ile zaman uyumlu çıktıların her girdi bir satır olarak işler.Zaman uyumsuz çıkışlarını ile dönüştürme dönüşümün tüm giriş satırları aldığı veya tüm giriş satırları aldığı için önce dönüşümün belirli satırları çıkış kadar işlemi tamamlamak için bir beklemeye girebilir.Bu konu, zaman uyumsuz dönüştürme anlatılır.Kendi işlem zaman uyumlu dönüştürme gerekiyorsa, bkz: Zaman uyumlu bir dönüştürme komut dosyası bileşeni ile oluşturma. Zaman uyumlu ve zaman uyumsuz bileşenleri arasındaki farklar hakkında daha fazla bilgi için bkz: Zaman uyumlu ve zaman uyumsuz dönüşümleri'ni anlama.
Komut dosyası bileşeni genel bakış için bkz: Komut dosyası bileşeni ile veri akışı genişletme.
Komut dosyası bileşeni ve sizin için oluşturduğu altyapı kodu, özel bir geliştirme işlemini basitleştirmek veri akışı bileşeni.Ancak, komut dosyası bileşeni çalışma şeklini anlamak için , özel veri akışı bileşen geliştirmede izlemeniz gereken adımlarda okumak yararlı Özel veri akışı bileşen geliştirme Bölüm ve özellikle Zaman uyumlu çıkışlarını ile özel bir dönüştürme bileşen geliştirme.
Bir zaman uyumsuz dönüştürme bileşeni ile çalışmaya başlama
Bir komut dosyası bileşeni eklediğinizde veri akışı sekmesi SSIS Tasarımcı, Komut dosyası bileşeni türünü seçin. Kaynak, dönüştürme veya hedef bileşen önceden isteyen iletişim kutusu görüntülenir. Bu iletişim kutusunda seçin. Dönüştürme.
meta veriler ve Tasarım modunda bir zaman uyumsuz dönüştürme bileşeni'ni yapılandırma
Bir dönüştürme bileşen oluşturmak için bu seçeneği seçtikten sonra bileşen kullanarak yapılandırma Komut dosyası dönüştürme Düzenleyicisi.Daha fazla bilgi için bkz:Bileşen Kod Düzenleyicisi'nde komut dosyası bileşeni'ni yapılandırma.
Komut dosyası bileşeni kullanacağı, komut dosyası dili seçmek için küme ScriptLanguage özellikKomut dosyası sayfaKomut dosyası dönüştürme Düzenleyicisi iletişim kutusu.
Not
Varsayılan komut dosyası kullanan kullanan dosyası kullanan bileşeni dilin komut dosyası kullanan kullanan dosyası kullanan ayarlamak için komut dosyası kullanan kullanan dosyası kullanan dili seçeneğiGenel sayfaSeçenekleri iletişim kutusu.Daha fazla bilgi için bkz:Genel sayfa.
Veri akışı dönüştürme bileşeni, bir giriş vardır ve bir veya daha fazla çıkış'ı destekler.Giriş ve çıkışlarını bileşeniniz, yapılandırma adımları kullanarak meta veriler tasarım modunda, tamamlamalısınız biridir Komut dosyası dönüştürme Düzenleyicisiözel komut dosyanızı yazmak için önce.
Giriş sütunlar'ı yapılandırma
Komut dosyası bileşeni kullanılarak oluşturulan dönüştürme bileşeni tek bir giriş vardır.
Üzerinde Giriş bir sütun sayfaKomut dosyası dönüştürme Düzenleyicisi, sütunlar listesi, veri akışında kullanılabilir Geliş yönündeki bileşeninin çıktı sütunları gösterir.Geçişi ya da dönüştürmek istediğiniz sütunları seçin.Okuma/yazma olarak yerinde dönüştürmek istediğiniz sütunları işaretleyin.
Hakkında daha fazla bilgi için Giriş bir sütun sayfaKomut dosyası dönüştürme Düzenleyicisi, see Komut dosyası dönüştürme Düzenleyicisi (giriş sayfası sütunları).
Çıktı sütunları giriş ve çıkışlarını yapılandırma
Bir dönüştürme bileşeni, bir veya daha fazla çıkış destekler.
Sık dönüştürme ile zaman uyumsuz çıkışlarını iki çıkışlarını vardır.Örneğin, belirli bir şehirde bulunan adresleri sayısını, toplama sonucu için başka bir çıkış gönderirken, bir çıkış için aracılığıyla adres verileri aktarmak isteyebilirsiniz.Toplama çıktı aynı zamanda yeni bir çıkış sütun gerektirir.
Üzerinde Giriş ve çıkışlarını sayfaKomut dosyası dönüştürme Düzenleyicisi, tek bir çıktı, varsayılan olarak oluşturuldu, ancak hiçbir çıktı sütunu oluşturulan bakın.Bu sayfa düzenleyici, aşağıdaki öğeleri yapılandırabilirsiniz:
Bir veya daha çok ek çıkış, bir toplama sonucu için bir çıkış gibi oluşturmak isteyebilirsiniz.Use Çıktı ekleme and Çıkış'ı kaldırma düğmeleri, zaman uyumsuz dönüştürme bileşen çıkışlarını yönetmek için.küme SynchronousInputID Her çıktı çıktı değil yalnızca Geliş yönündeki bir bileşenden veri aktarmak, varolan satır ve sütunları yerinde dönüştürme olduğunu belirtir veya sıfıra özellik. Çıkışlarını giriş zaman uyumsuz yaptığı bu ayardır.
Bir kolay ad için giriş ve çıkışlarını atamak isteyebilirsiniz.Komut dosyası bileşeni, giriş olarak başvurmak için kullandığınız yazılı erişimci özelliklerini oluşturmak için bu adları kullanır ve komut çıktısını verir.
Sık sık bir zaman uyumsuz dönüştürme veri akışı için sütun ekler.Zaman SynchronousInputID sıfır, çıktı değil yalnızca Geliş yönündeki bir bileşenden veri aktarmak veya bunu varolan satır ve sütunları yerinde dönüştürmek, eklemeli ve çıktı sütunları, açıkça çıktı yapılandırma gösteren bir çıkış özellik. Çıktı sütunları için eşleştirildikleri giriş sütunları aynı ada sahip gerekmez.
Ek bilgi içerecek şekilde daha fazla sütun eklemek isteyebilirsiniz.Ek sütunlar verilerle doldurmak için kendi kodunuzu yazmalıdır.Bir standart hata çıktı davranışı yeniden oluşturma hakkında daha fazla bilgi için bkz: Komut dosyası bileşeni için bir hata çıktı benzetme.
Hakkında daha fazla bilgi için Giriş ve çıkışlarını sayfaKomut dosyası dönüştürme Düzenleyicisi, see Dönüştürme komut dosyası Düzenleyicisi (giriş ve çıkışlarını sayfa).
Değişkenleri ekleme
Komut dosyanızda kullanmak istediğiniz değerleri tüm varolan değişkenlerini varsa, bunları ekleyebileceğiniz ReadOnlyVariables ve ReadWriteVariables üzerinde özellik alanları Komut dosyası sayfaKomut dosyası dönüştürme Düzenleyicisi.
Birden çok değişken özellik alanlarını eklediğinizde, değişken adları virgülle ayırın.Üç nokta (tıklatarak birden çok değişken seçebilirsiniz**…**) düğmesiniReadOnlyVariables ve ReadWriteVariables özellik alanları ve içindeki değişkenler'ı seçerek Değişkenleri seçin. iletişim kutusu.
Değişkenler, komut dosyası bileşeni ile kullanma hakkında genel bilgi için bkz: Komut dosyası bileşen değişkenleri kullanma.
Hakkında daha fazla bilgi için Komut dosyası sayfaKomut dosyası dönüştürme Düzenleyicisi, see Komut dosyası dönüştürme Düzenleyicisi (kod sayfası).
Kod ve Tasarım modunda, bir zaman uyumsuz dönüştürme bileşeni komut dosyası kullanan kullanan dosyası kullanan
Bileşeniniz için tüm meta veriler yapılandırdıktan sonra kendi özel komut dosyası yazabilirsiniz.In the Script Transformation Editor, on the Script page, click Edit Script to open the Microsoft Visual Studio Tools for Applications (VSTA) IDE where you can add your custom script.The scripting language that you use depends on whether you selected Microsoft Visual Basic 2008 or Microsoft Visual C# 2008 as the script language for the ScriptLanguage property on the Script page.
Komut dosyası bileşeni kullanılarak oluşturulmuş bileşenler her tür için geçerli olan önemli bilgi için bkz: Kodlama ve kod bileşen hata ayıklama.
Otomatik oluşturulan kodu anlama
VSTA IDE oluşturma ve dönüştürme bileşenini düzenlenebilir yapılandırma açtığınızda ScriptMain sınıf için koçanları olan kod düzenleyicisinde görünür ProcessInputRow ve CreateNewOutputRows yöntemleri. The ScriptMain class is where you will write your custom code, and ProcessInputRow is the most important yöntem in a dönüştürme component. The CreateNewOutputRows yöntem is more typically used in a kaynak component, which is like an asynchronous dönüştürme in that both components must create their own output rows.
VSTA açar Proje Gezgini penceresinde, komut dosyası bileşeni de oluşturduğu, salt okunur görebilirsinizBufferWrapper ve ComponentWrapper Proje maddeler. The ScriptMain class inherits from the UserComponent class in the ComponentWrapper project öğe.
Çalışma zamanında veri akışı altyapısı çağrıları PrimeOutput yöntemde UserComponent sınıf, hangi geçersiz kılmaları PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[]) yöntem ScriptComponent üst sınıf. The PrimeOutput yöntem in turn calls the CreateNewOutputRows yöntem.
Sonra veri akışı motorunu çağırır ProcessInput yöntemde UserComponent sınıf, hangi geçersiz kılmaları ProcessInput(Int32, PipelineBuffer) yöntem ScriptComponent üst sınıf. The ProcessInput yöntem in turn loops through the rows in the input buffer and calls the ProcessInputRow yöntem one saat for each row.
Kendi özel kod yazma
Özel bir zaman uyumsuz dönüştürme bileşeni oluşturmayı tamamlamak için , geçersiz kılınmış kullanmanız gerekir ProcessInputRow Giriş arabelleği her satırdaki verileri işlemek için yöntem. Çıkışlarını giriş için zaman uyumlu olmadığı için açıkça veri satırı için çıktıların yazmanız gerekir.
Bir zaman uyumsuz bir dönüştürme, kullanabileceğiniz AddRow Satır içindeki uygun gelen çıktı eklemek için yöntem ProcessInputRow veya ProcessInput yöntemleri. Kullanmak zorunda CreateNewOutputRows yöntem. sonuçlar (toplama sonuçlar gibi tek bir satır için belirli bir çıkış yazıyorsanız, çıktı satırı önceden kullanarak oluşturabileceğiniz CreateNewOutputRows yöntem ve daha sonra tüm giriş satırları işleniyor sonra değerlerini doldurun. Ancak, birden çok satır oluşturmak kullanışlı değildir CreateNewOutputRows yöntem, çünkü bu komut dosyası bileşeni yalnızca, geçerli satırda bir giriş veya çıkış kullanmanıza olanak sağlar. The CreateNewOutputRows yöntem is more important in a kaynak component where there are no input rows to process.
Ayrıca, geçersiz kılmak istiyor ProcessInput yöntem, böylece ek ilk veya son önce veya sonra giriş ve arama döngüye al işlemi yapmak için ProcessInputRow Her satır için. Örneğin, bu konu başlığı altındaki kod örneklerinden birini geçersiz kılar ProcessInput , belirli bir şehirdeki adresler sayısını saymak için ProcessInputRow satırlar arasında döngü. Örnek, tüm satırları işlendi sonra Özet değeri ikinci çıktısına yazar. Örneğin çıkışı tamamlar. ProcessInput Çıktı arabelleği artık ne zaman kullanılabilir, çünkü PostExecute denir.
Gereksinimlerinize bağlı olarak, siz de komut dosyası yazmak isteyebilirsiniz PreExecute ve PostExecute kullanılabilir yöntemleri ScriptMain herhangi bir ilk veya son işlem gerçekleştirmek için sınıf'ı tıklatın.
Not
Sıfırdan bir özel veri akışı bileşen geliştirme, geçersiz kılmak önemli olacaktır PrimeOutput Böylece, daha sonra arabellekleri için veri satırı ekleyebilirsiniz önbellek yöntemine çıktı arabelleği için başvuruyor. Her çıkış arabellekte temsil eden bir otomatik olarak oluşturulan sınıfı olan komut dosyası bileşeni bu gerekli değildir, çünkü BufferWrapper Proje öğesi.
Örnek
Bu örnek, gereken özel kod gösterir ScriptMain bir zaman uyumsuz dönüştürme bileşen oluşturmak için sınıf'ı tıklatın.
Not
These examples use the Person.Address table in the AdventureWorks sample database and pass its first and fourth columns, the intAddressID and nvarchar(30)City columns, through the data flow.Aynı veri kaynağı, dönüştürme ve bu bölümdeki hedef örnekleri kullanılır.Her bir örnek için ek Önkoşullar ve varsayımlar belgelenmiştir.
Bu örnek, bir zaman uyumsuz dönüştürme bileşeniyle iki çıkışlarını gösterir.Bu dönüştürme geçtiği AddressID and Şehir sütun için bir çıkış adresleri (Redmond, Washington, ABD), belirli bir şehirde bulunan sayar ve ardından ikinci bir çıkış elde edilen değere çıkarır.
Bu örnek kodu uygulamak istiyorsanız, paket ve bileşen şekilde yapılandırmanız gerekir:
Yeni bir komut dosyası bileşeni için veri akışı Tasarımcısı yüzey ekleyin ve dönüştürme yapılandırın.
Çıktı bir kaynak veya başka bir dönüşümünün tasarımcısında yeni dönüştürme bileşeni bağlanın.Bu çıktı verilerini sağlamalıdır Person.Address tablosuAdventureWorks en az örnek veritabanıAddressID and Şehir sütunlar.
Açık Komut dosyası dönüştürme Düzenleyicisi.Üzerinde Giriş bir sütun sayfa, seçin.AddressID and Şehir sütunlar.
Üzerinde Giriş ve çıkışlarını sayfa ekleyin ve yapılandırmaAddressID and Şehir ilk çıkış sütunlarda çıktı.Ikinci bir çıktı eklemek ve ikinci çıktı Özet değeri için bir çıkış sütun ekleyin.Bu örnek giriş her satırın ilk çıkış için açıkça kopyaladığı için ilk çıkış SynchronousInputID özelliğini 0 olarak ayarlayın.Yeni oluşturulan çıktının SynchronousInputID özellik, zaten 0 olarak küme.
Giriş, çıkışlarını ve bunları daha açıklayıcı bir ad vermek için yeni çıktı sütun yeniden adlandırın.Örnek kullanır. MyAddressInput adı olarak giriş, MyAddressOutput and MySummaryOutput çıktıları için ve MyRedmondCount çıktı için sütun ikinci çıktıyı.
Üzerinde Komut dosyası sayfasında, tıklatın.Komut dosyası Düzenle ve aşağıdaki kodu girin.Komut dosyası geliştirme ortamı kapatın ve Komut dosyası dönüştürme Düzenleyicisi.
Oluşturma ve bir hedef bileşeni için beklediği ilk çıkış yapılandırma AddressID and Şehir sütunlarSQL Server Hedef veya hedef bileşeni içinde gösterilen örnek Hedef komut dosyası bileşeni ile oluşturma, .Ardından, dönüşümünün tersinin ilk çıkış bağlanın. MyAddressOutput, bileşenin hedef.Aşağıdaki komutu çalıştırarak hedef tablo oluşturabilirsiniz. Transact-SQL komut, AdventureWorks veritabanı:
CREATE TABLE [Person].[Address2]( [AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL )
Oluşturun ve başka bir hedef bileşen ikinci çıkış için yapılandırın.Sonra dönüştürme çıktısı ikinci bağlanma MySummaryOutput, bileşenin hedef.Ikinci çıkış tek bir değere sahip tek bir satır yazdığından, tek bir sütun içeren yeni bir dosyaya bağlayan düz dosya bir Bağlantı Yöneticisi ile hedef kolayca yapılandırabilirsiniz.Bu örnekte, bu hedef sütunun adlı MyRedmondCount.
Örnek çalıştırın.
Public Class ScriptMain
Inherits UserComponent
Private myRedmondAddressCount As Integer
Public Overrides Sub CreateNewOutputRows()
MySummaryOutputBuffer.AddRow()
End Sub
Public Overrides Sub MyAddressInput_ProcessInput(ByVal Buffer As MyAddressInputBuffer)
While Buffer.NextRow()
MyAddressInput_ProcessInputRow(Buffer)
End While
If Buffer.EndOfRowset Then
MyAddressOutputBuffer.SetEndOfRowset()
MySummaryOutputBuffer.MyRedmondCount = myRedmondAddressCount
MySummaryOutputBuffer.SetEndOfRowset()
End If
End Sub
Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
With MyAddressOutputBuffer
.AddRow()
.AddressID = Row.AddressID
.City = Row.City
End With
If Row.City.ToUpper = "REDMOND" Then
myRedmondAddressCount += 1
End If
End Sub
End Class
public class ScriptMain:
UserComponent
{
private int myRedmondAddressCount;
public override void CreateNewOutputRows()
{
MySummaryOutputBuffer.AddRow();
}
public override void MyAddressInput_ProcessInput(MyAddressInputBuffer Buffer)
{
while (Buffer.NextRow())
{
MyAddressInput_ProcessInputRow(Buffer);
}
if (Buffer.EndOfRowset())
{
MyAddressOutputBuffer.SetEndOfRowset();
MySummaryOutputBuffer.MyRedmondCount = myRedmondAddressCount;
MySummaryOutputBuffer.SetEndOfRowset();
}
}
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
{
{
MyAddressOutputBuffer.AddRow();
MyAddressOutputBuffer.AddressID = Row.AddressID;
MyAddressOutputBuffer.City = Row.City;
}
if (Row.City.ToUpper() == "REDMOND")
{
myRedmondAddressCount += 1;
}
}
}
|