Udostępnij przez


Parsing Non-Standard Text File Formats with the Script Component

Jeśli Twój urządzenie źródłowe dane są rozmieszczone w niestandardowym formacie, może się okazać, że wygodniejszy konsolidować wszystkie analizy logikę w jednym skrypcie niż aby łańcuch wielu Integration Services Transformacje, aby osiągnąć ten sam wynik.

Przykład 1: Podczas analizy tekstu rozdzielanego wiersz rekordy

Przykład 2: Dzielenie nadrzędne i podrzędność rekordy

Uwaga

Jeśli chcesz utworzyć składnik, który można łatwiej ponownie używać wielu zadań przepływ danych i wielu pakietów, należy rozważyć przy użyciu kodu w tym przykładzie składnika skryptów jako punktu wyjścia dla składnika przepływ danych niestandardowych.Aby uzyskać więcej informacji zobaczRozwijanie niestandardowy składnik przepływ danych.

Przykład 1: Podczas analizy tekstu rozdzielanego wiersz rekordy

W tym przykładzie pokazano, jak plik tekstowy, w którym każdej kolumnie danych pojawia się w osobnym wierszu i analizować je w obiekt docelowy tabela za pomocą składnika skryptów.

Aby uzyskać więcej informacji dotyczących sposobu konfigurowania składnika skryptów do użycia jako transformacja w przepływ danych zobacz Tworzenie synchroniczne transformacja składnika skryptów i Tworzenie transformacja asynchroniczny przy użyciu składnika skryptów.

Aby skonfigurować w tym przykładzie składnik skryptów

  1. Tworzenie i zapisywanie pliku tekstowego o nazwie rowdelimiteddata.txt , który zawiera następujące dane źródłowe:

    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:
    
  2. Otwórz Management Studio i połączyć się z wystąpienie SQL Server.

  3. Wybierz obiekt docelowy bazy danych i otworzyć nowe okno kwerendy.W oknie kwerendy, uruchom następujący skrypt, aby utworzyć obiekt docelowy tabeli:

    create table RowDelimitedData
    (
    FirstName varchar(32),
    LastName varchar(32),
    Title varchar(32),
    City varchar(32),
    StateProvince varchar(32)
    )
    
  4. Otwórz BI Development Studio i Utwórz nowy Integration Services pakiet o nazwie ParseRowDelim.dtsx.

  5. Dodawanie plik prosty menedżer połączeń do pakiet, nadaj mu nazwę RowDelimitedData i skonfigurować go, aby połączyć się z plikiem rowdelimiteddata.txt utworzonego w poprzednim kroku.

  6. Dodać do pakiet menedżer połączeń OLE DB i skonfigurować go do łączenia się z wystąpienie SQL Server i bazy danych, w którym został utworzony w tabela docelowej.

  7. Dodawanie zadanie przepływu danych do pakiet, a następnie kliknij przycisk Przepływ danych kartę SSIS projektanta.

  8. Dodawanie urządzenie źródłowe plik prosty do przepływ danych i jest skonfigurowana do używania RowDelimitedData menedżer połączeń.Na kolumna stronaplik prosty Edytor urządzenie źródłowe, zaznacz jedną kolumna zewnętrzną dostępne.

  9. Dodawanie składnika skryptów do przepływ danych i skonfigurować go jako transformacja.Dane wyjściowe urządzenie źródłowe plik prosty połączyć się z składnik skryptów.

  10. Kliknij dwukrotnie składnik skryptów, aby wyświetlić Skrypt transformacja edytora.

  11. Na kolumna danych wejściowych stronaSkrypt transformacja edytora, należy zaznaczyć jedną kolumna danych wejściowych dostępnych.

  12. Na Wejść i wyjść stronaSkrypt transformacja edytora, zaznacz opcję Wyjście 0 i zestaw jego SynchronousInputID na 0. Tworzenie 5 kolumn wyjściowych, wszystkie typu [DT_STR] ciąg o długości 32:

    • FirstName

    • LastName

    • Title

    • Miasto

    • StateProvince

  13. Na Skrypt stronaSkrypt transformacja edytora, click Edytowanie skryptu i wprowadź kod ScriptMain Klasa w przykładzie. Zamknij środowiska programistycznego skryptu, Skrypt transformacja edytora.

  14. Dodawanie obiekt docelowy serwera SQL do przepływ danych.Jest skonfigurowana do używania menedżer połączeń OLE DB i tabela RowDelimitedData.Dane wyjściowe skryptu składnika połączyć się z tego obiekt docelowy.

  15. Należy uruchomić pakiet.Po zakończeniu pracy tego pakiet, należy zbadać rekordów w SQL Server obiekt docelowy tabeli.

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

    }

Przykład 2: Dzielenie nadrzędne i podrzędność rekordy

W tym przykładzie pokazano, jak plik tekstowy, w którym wiersz separatora poprzedza wiersz rekordu nadrzędnego, który następuje na dowolną liczbę wierszy rekordów podrzędność, i analizować je do poprawnie znormalizowana nadrzędne i podrzędność obiekt docelowy tabel za pomocą składnika skryptów.W tym przykładzie prosty łatwo mogą być dostosowane do urządzenie źródłowe pliki, używające więcej niż jeden wiersz lub kolumna dla każdego rekordu nadrzędne i podrzędność, tak długo, jak jest jakiś sposób zidentyfikować początek i koniec każdego rekordu.

Ostrzeżenie

W tym przykładzie jest przeznaczona wyłącznie w celach demonstracyjnych.Po uruchomieniu próbki więcej niż jeden raz, wstawia zduplikowane wartości kluczy w obiekt docelowy tabela.

Aby uzyskać więcej informacji dotyczących sposobu konfigurowania składnika skryptów do użycia jako transformacja w przepływ danych zobacz Tworzenie synchroniczne transformacja składnika skryptów i Tworzenie transformacja asynchroniczny przy użyciu składnika skryptów.

Aby skonfigurować w tym przykładzie składnik skryptów

  1. Tworzenie i zapisywanie pliku tekstowego o nazwie parentchilddata.txt , który zawiera następujące urządzenie źródłowe danych:

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

  1. Otwórz SQL Server Management Studio i połączyć się z wystąpienie SQL Server.

  2. Wybierz obiekt docelowy bazy danych i otworzyć nowe okno kwerendy.W oknie kwerendy, uruchom następujący skrypt, aby utworzyć obiekt docelowy tabel:

    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])
    
  3. Otwórz Business Intelligence Development Studio i Utwórz nowy Integration Services pakiet o nazwie SplitParentChild.dtsx.

  4. Dodawanie plik prosty menedżer połączeń do pakiet, nadaj mu nazwę ParentChildData i skonfigurować go, aby połączyć się z plikiem parentchilddata.txt utworzonego w poprzednim kroku.

  5. Dodać do pakiet menedżer połączeń OLE DB i skonfigurować go do łączenia się z wystąpienie SQL Server a bazą danych, w którym został utworzony obiekt docelowy tabel.

  6. Dodawanie zadanie przepływu danych do pakiet, a następnie kliknij przycisk Przepływ danych kartę SSIS projektanta.

  7. Dodaj płaski plikowe urządzenie źródłowe dla przepływ danych i jest skonfigurowana do używania ParentChildData menedżer połączeń.Na kolumna stronaplik prosty Edytor urządzenie źródłowe, zaznacz jedną kolumna zewnętrzną dostępne.

  8. Dodawanie składnika skryptów do przepływ danych i skonfigurować go jako transformacja.Dane wyjściowe urządzenie źródłowe plik prosty połączyć się z składnik skryptów.

  9. Kliknij dwukrotnie składnik skryptów, aby wyświetlić Skrypt transformacja edytora.

  10. Na kolumna danych wejściowych stronaSkrypt transformacja edytora, należy zaznaczyć jedną kolumna danych wejściowych dostępnych.

  11. Na Wejść i wyjść stronaSkrypt transformacja edytora, zaznacz opcję Wyjście 0, zmień jego nazwę na ParentRecords, i zestaw jego SynchronousInputID Brak. Utwórz 2 kolumny wyjściowe:

    • ParentID (klucz podstawowy), typ 4 bajtowy całkowita [DT_I4]

    • ParentRecord typu [DT_STR] ciąg o długości 32.

  12. Utwórz drugą danych wyjściowych i nadaj mu nazwę ChildRecords.The SynchronousInputID of the new output is already zestaw to None. Utwórz 3 kolumny wyjściowe:

    • ChildID (klucz podstawowy), typ 4 bajtowy całkowita [DT_I4]

    • ParentID (klucz obcy), również czwartego bajtu typu całkowita [DT_I4]

    • ChildRecord typu [DT_STR] ciąg o długości 50

  13. Na Skrypt stronaSkrypt transformacja edytora, click Edytowanie skryptu.W ScriptMain klasy, należy wprowadzić kod przedstawiony w przykładzie. Zamknij środowiska programistycznego skryptu, Skrypt transformacja edytora.

  14. Dodawanie obiekt docelowy serwera SQL do przepływ danych.Dane wyjściowe ParentRecords składnika skryptów połączyć się z tym obiekt docelowy.Configure go do używania menedżer połączeń OLE DB i tabela elementów nadrzędnych.

  15. Dodawanie innego programu SQL Server obiekt docelowy do przepływ danych.Dane wyjściowe ChildRecords składnika skryptów połączyć się z tego obiekt docelowy.Jest skonfigurowana do używania menedżer połączeń OLE DB i w tabela elementy podrzędne.

  16. Należy uruchomić pakiet.Po zakończeniu pracy pakiet zbadać rekordy nadrzędne i podrzędność na obu SQL Server obiekt docelowy tabel.

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

    }
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.