Komut dosyası bileşeni ile biçimleri olan Non-Standard metin dosyası ayrıştırılıyor.
Kaynak verileriniz standart olmayan bir biçimde düzenlenmiş, size tüm, ayrıştırma mantığını birlikte zincir daha tek bir komut dosyasında birleştirmek daha kolay gelebilir birden çokIntegration Servicesdönüştürmeleri için elde aynı sonucu.
Örnek 1: Satır sınırlı kayıt ayrıştırma
Örnek 2: Bölmenin üst ve alt kayıtlar
Not
Birden çok veri akışı görevi ve birden çok paket daha kolay yeniden kullanabileceğiniz bir bileşen oluşturmak isterseniz, kodu bu komut dosyası bileşen örneğinde başlangıç noktası olarak bir özel veri akışı bileşeni kullanabilirsiniz.Daha fazla bilgi için bkz:Özel veri akışı bileşen geliştirme.
Örnek 1: Satır sınırlı kayıt ayrıştırma
Bu örnek gösterir, her veri sütun görünür ayrı bir satıra bir metin dosyası almak için ve çözümleme, bir hedef tabloya kullanarak komut dosyası bileşeni.
Bileşen için dönüştürme veri akışı olarak, bkz: komut dosyasını yapılandırma hakkında daha fazla bilgi içinZaman uyumlu bir dönüştürme komut dosyası bileşeni ile oluşturmaveZaman uyumsuz bir dönüştürme komut dosyası bileşeni ile oluşturma.
Bu komut dosyası bileşeni örneği yapılandırmak için
Oluşturma adlı bir metin dosyasına kaydediprowdelimiteddata.txt Aşağıdaki kaynak verileri içeren:
FirstName: Nancy LastName: Davolio Title: Sales Representative City: Seattle StateProvince: WA FirstName: Andrew LastName: Fuller Title: Vice President, Sales City: Tacoma StateProvince: WA FirstName: Steven LastName: Buchanan Title: Sales Manager City: London StateProvince:
AçıkManagement Studiobağlanmak ve bir örnek,SQL Server.
Hedef veritabanını seçin ve yeni bir sorgu penceresi açın.Sorgu penceresinde yürütmek hedef tablo oluşturmak için aşağıdaki komut dosyası:
create table RowDelimitedData ( FirstName varchar(32), LastName varchar(32), Title varchar(32), City varchar(32), StateProvince varchar(32) )
AçıkBI Development Studiove yeni oluşturIntegration Servicespaket adı ParseRowDelim.dtsx.
Bir düz dosya Bağlantı Yöneticisi paket ekleme, RowDelimitedData olarak adlandırın ve bir önceki adımda oluşturduğunuz rowdelimiteddata.txt dosyasına bağlanmak için yapılandırın.
Bir OLE DB Bağlantı Yöneticisi paket ekleyin ve bağlanmak için yapılandırın örnek,SQL Serververitabanı, oluşturduğunuz hedef tablo.
Bir Data Flow görevi paket ve tıklatınVeri akışı SSIS Tasarımcısı. sekmesi
düz dosya Ekle kaynak için veri akışı ve RowDelimitedData Bağlantı Yöneticisi'ni kullanmak üzere yapılandırın.,Sütunlar sayfa seçin Düz dosya Kaynak Düzenleyicisi tek kullanılabilir dış sütun.
Veri akışı için bir komut dosyası bileşeni ekleme ve dönüştürme yapılandırın.Düz dosya çıktısı bağlanmak kaynak komut dosyası bileşeni.
Görüntülemek için komut dosyası bileşeni çift tıklatınKomut dosyası dönüştürme Düzenleyicisi.
,Giriş sütunlar sayfa seçin Kod dönüştürme Düzenleyicisi tek kullanılabilir giriş sütun.
,Giriş ve çıkışları sayfa Dönüştürme komut dosyası Düzenleyicisi'ni, çıkış 0'ı seçin ve ayarlayın, SynchronousInputID0.Tüm uzunluğu 32 olan [DT_STR] dize türünde 5 çıktı sütunu oluşturun:
Ad
Soyad
Başlık
Şehir
StateProvince
,Komut dosyası sayfa Dönüştürme komut dosyası Düzenleyicisi'ni, Komut dosyası Düzenle ' yi tıklatın ve ScriptMainsınıf örneği. gösterilen kodu girin Komut dosyası geliştirme ortamı kapatın veKomut dosyası dönüştürme Düzenleyicisi.
SQL Server hedef veri akışı için ekleyin.OLE DB Bağlantı Yöneticisi ve RowDelimitedData kullanmak üzere yapılandırma tablo.Komut dosyası bileşeni çıkışını bu hedef bağlantı.
paket çalıştırın.paket tamamladıktan sonra kayıtları incelemekSQL ServerHedef tablo.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim columnName As String
Dim columnValue As String
' Check for an empty row.
If Row.Column0.Trim.Length > 0 Then
columnName = Row.Column0.Substring(0, Row.Column0.IndexOf(":"))
' Check for an empty value after the colon.
If Row.Column0.Substring(Row.Column0.IndexOf(":")).TrimEnd.Length > 1 Then
' Extract the column value from after the colon and space.
columnValue = Row.Column0.Substring(Row.Column0.IndexOf(":") + 2)
Select Case columnName
Case "FirstName"
' The FirstName value indicates a new record.
Me.Output0Buffer.AddRow()
Me.Output0Buffer.FirstName = columnValue
Case "LastName"
Me.Output0Buffer.LastName = columnValue
Case "Title"
Me.Output0Buffer.Title = columnValue
Case "City"
Me.Output0Buffer.City = columnValue
Case "StateProvince"
Me.Output0Buffer.StateProvince = columnValue
End Select
End If
End If
End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string columnName;
string columnValue;
// Check for an empty row.
if (Row.Column0.Trim().Length > 0)
{
columnName = Row.Column0.Substring(0, Row.Column0.IndexOf(":"));
// Check for an empty value after the colon.
if (Row.Column0.Substring(Row.Column0.IndexOf(":")).TrimEnd().Length > 1)
// Extract the column value from after the colon and space.
{
columnValue = Row.Column0.Substring(Row.Column0.IndexOf(":") + 2);
switch (columnName)
{
case "FirstName":
// The FirstName value indicates a new record.
this.Output0Buffer.AddRow();
this.Output0Buffer.FirstName = columnValue;
break;
case "LastName":
this.Output0Buffer.LastName = columnValue;
break;
case "Title":
this.Output0Buffer.Title = columnValue;
break;
case "City":
this.Output0Buffer.City = columnValue;
break;
case "StateProvince":
this.Output0Buffer.StateProvince = columnValue;
break;
}
}
}
}
Örnek 2: Bölmenin üst ve alt kayıtlar
Bu örnek, ayırıcı satır belirsiz sayıda tarafından alt kayıt satır sonunda bir üst kayıt satır etiketinden önce bir metin dosyasına alıp, doğru normalleştirilmiş üst ve alt hedef tablolar halinde komut dosyası bileşeni'ni kullanarak çözümleme gösterilmiştir.Her kaydın başlangıç ve tanımlamak için birkaç yol var olduğu sürece bu basit örnek kolayca her üst ve alt kayıt için birden fazla satır veya sütun kullanan kaynak dosyaları için Cicero'nun.
Uyarı
Bu örnek yalnızca gösterim amacıyla hazırlanmıştır.Örnek bir kereden fazla çalıştırırsanız, yinelenen anahtar değerleri hedef tabloya ekler.
Bileşen için dönüştürme veri akışı olarak, bkz: komut dosyasını yapılandırma hakkında daha fazla bilgi içinZaman uyumlu bir dönüştürme komut dosyası bileşeni ile oluşturmaveZaman uyumsuz bir dönüştürme komut dosyası bileşeni ile oluşturma.
Bu komut dosyası bileşeni örneği yapılandırmak için
- Oluşturma adlı bir metin dosyasına kaydedipparentchilddata.txt Aşağıdaki kaynak verileri içeren:
******** PARENT 1 DATA child 1 data child 2 data child 3 data child 4 data ******** PARENT 2 DATA child 5 data child 6 data child 7 data child 8 data ********
AçıkSQL Server Management Studiobağlanmak ve bir örnek,SQL Server.
Hedef veritabanını seçin ve yeni bir sorgu penceresi açın.Sorgu penceresinde hedef tablo oluşturmak için aşağıdaki komut dosyasını yürütün:
CREATE TABLE [dbo].[Parents]( [ParentID] [int] NOT NULL, [ParentRecord] [varchar](32) NOT NULL, CONSTRAINT [PK_Parents] PRIMARY KEY CLUSTERED ([ParentID] ASC) ) GO CREATE TABLE [dbo].[Children]( [ChildID] [int] NOT NULL, [ParentID] [int] NOT NULL, [ChildRecord] [varchar](32) NOT NULL, CONSTRAINT [PK_Children] PRIMARY KEY CLUSTERED ([ChildID] ASC) ) GO ALTER TABLE [dbo].[Children] ADD CONSTRAINT [FK_Children_Parents] FOREIGN KEY([ParentID]) REFERENCES [dbo].[Parents] ([ParentID])
AçıkBusiness Intelligence Development Studiove yeni oluşturIntegration Servicespaket adı SplitParentChild.dtsx.
Bir düz dosya Bağlantı Yöneticisi paket ekleme, ParentChildData olarak adlandırın ve bir önceki adımda oluşturduğunuz parentchilddata.txt dosyasına bağlanmak için yapılandırın.
Paket için bir OLE DB Bağlantı Yöneticisi ekleme ve yapılandırma örneğine bağlanmak içinSQL Serververitabanı, oluşturduğunuz hedef tablolar.
Bir Data Flow görevi paket ve tıklatınVeri akışı SSIS Tasarımcısı. sekmesi
düz dosya kaynağı için veri akışı eklemek ve ParentChildData Bağlantı Yöneticisi'ni kullanmak üzere yapılandırın.,Sütunlar sayfa seçin Düz dosya Kaynak Düzenleyicisi tek kullanılabilir dış sütun.
Veri akışı için bir komut dosyası bileşeni ekleme ve dönüştürme yapılandırın.Düz dosya çıktısı bağlanmak kaynak komut dosyası bileşeni.
Görüntülemek için komut dosyası bileşeni çift tıklatınKomut dosyası dönüştürme Düzenleyicisi.
,Giriş sütunlar sayfa seçin Kod dönüştürme Düzenleyicisi tek kullanılabilir giriş sütun.
,Giriş ve çıkışlarıDönüştürme komut dosyası Düzenleyicisi'ni, sayfanın çıktısı 0'ı seçin, ParentRecords için yeniden adlandırın ve küme, SynchronousInputIDyok.2 Çıktı sütunu oluşturun:
Tür dört bayt işaretli tamsayı [DT_I4], ParentID (birincil anahtar)
Uzunluğu 32 olan [DT_STR] dize türünde ParentRecord.
İkinci bir çýktý yaratmak ve ChildRecords olarak adlandırın.The SynchronousInputID of the new output is already set to None.3 Çıktı sütunu oluşturun:
Tür dört bayt işaretli tamsayı [DT_I4], ChildID (birincil anahtar)
Ayrıca türü dört bayt işaretli tamsayı [DT_I4], ParentID (yabancı anahtar),
ChildRecord uzunluğu 50 olan [DT_STR] dize türünde
,Komut dosyası sayfa Kod dönüştürme DüzenleyicisiKomut dosyası Düzenleseçeneğini tıklatın.,ScriptMainsınıf, örnek. gösterilen kodu girinKomut dosyası geliştirme ortamı kapatın veKomut dosyası dönüştürme Düzenleyicisi.
SQL Server hedef veri akışı için ekleyin.Bu hedef.Configure için komut dosyası bileşeni ParentRecords çıkışını bağlanmak, OLE DB Bağlantı Yöneticisi ve Ebeveyn tablo.
Başka bir SQL Server hedef veri akışı için ekleyin.Komut dosyası bileşeni ChildRecords çıkışını bu hedef bağlantı.OLE DB Bağlantı Yöneticisi ve alt tablo kullanmak üzere yapılandırın.
paket çalıştırın.Sonra paket bitirdi, iki üst ve alt kayıtların inceleyinSQL ServerHedef tablo.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Static nextRowIsParent As Boolean = False
Static parentCounter As Integer = 0
Static childCounter As Integer = 0
' If current row starts with separator characters,
' then following row contains new parent record.
If Row.Column0.StartsWith("***") Then
nextRowIsParent = True
Else
If nextRowIsParent Then
' Current row contains parent record.
parentCounter += 1
Me.ParentRecordsBuffer.AddRow()
Me.ParentRecordsBuffer.ParentID = parentCounter
Me.ParentRecordsBuffer.ParentRecord = Row.Column0
nextRowIsParent = False
Else
' Current row contains child record.
childCounter += 1
Me.ChildRecordsBuffer.AddRow()
Me.ChildRecordsBuffer.ChildID = childCounter
Me.ChildRecordsBuffer.ParentID = parentCounter
Me.ChildRecordsBuffer.ChildRecord = Row.Column0
End If
End If
End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
int static_Input0_ProcessInputRow_childCounter = 0;
int static_Input0_ProcessInputRow_parentCounter = 0;
bool static_Input0_ProcessInputRow_nextRowIsParent = false;
// If current row starts with separator characters,
// then following row contains new parent record.
if (Row.Column0.StartsWith("***"))
{
static_Input0_ProcessInputRow_nextRowIsParent = true;
}
else
{
if (static_Input0_ProcessInputRow_nextRowIsParent)
{
// Current row contains parent record.
static_Input0_ProcessInputRow_parentCounter += 1;
this.ParentRecordsBuffer.AddRow();
this.ParentRecordsBuffer.ParentID = static_Input0_ProcessInputRow_parentCounter;
this.ParentRecordsBuffer.ParentRecord = Row.Column0;
static_Input0_ProcessInputRow_nextRowIsParent = false;
}
else
{
// Current row contains child record.
static_Input0_ProcessInputRow_childCounter += 1;
this.ChildRecordsBuffer.AddRow();
this.ChildRecordsBuffer.ChildID = static_Input0_ProcessInputRow_childCounter;
this.ChildRecordsBuffer.ParentID = static_Input0_ProcessInputRow_parentCounter;
this.ChildRecordsBuffer.ChildRecord = Row.Column0;
}
}
}
|