Udostępnij za pośrednictwem


Analizowanie pliku tekstowego niestandardowych formatach składnik skryptów

Podczas swojego źródło dane są rozmieszczone w niestandardowym formacie, użytkownik może wygodniejszym konsolidować wszystkie analizy logikę w pojedynczym skrypcie niż aby łańcuch wiele Integration Services przekształcenia, aby osiągnąć ten sam wynik.

Przykład 1: Podczas analizowania rozdzielanym wierszu rekordów

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

Ostrzeżenie

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

Przykład 1: Podczas analizowania rozdzielanym wierszu rekordów

W tym przykładzie pokazano, jak plik tekstowy, w którym każda kolumna danych jest wyświetlany w osobnym wierszu i analizować je na obiekt docelowy tabela za pomocą składnika skryptów.

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

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

  1. Utwórz i Zapisz plik tekstowy o nazwie rowdelimiteddata.txt zawiera następujące źródło danych:

    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 Kwerenda wykonać następujący skrypt, aby utworzyć tabela docelową:

    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 utworzyć nowy Integration Services pakiet o nazwie ParseRowDelim.dtsx.

  5. Dodawanie pliku prostego menedżer połączeń do pakiet, nadaj mu nazwę RowDelimitedData i skonfigurować go do łączenia 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órej utworzono obiekt docelowy tabela.

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

  8. Dodać płaski źródło pliku do przepływ danych i skonfigurować go do używania menedżer połączeń RowDelimitedData.Na kolumna strona Płaski Edytor źródła pliku, zaznacz pojedynczy zewnętrzny kolumna dostępne.

  9. Dodaj składnik skryptów dla przepływ danych i skonfiguruj ją jako transformacja.Połączyć wyjścia płaski plik źródłowy składnik skryptów.

  10. Kliknij dwukrotnie składnik skryptów, aby wyświetlić Script Editor transformacji.

  11. Na Wprowadzania kolumn strona Script Editor transformacji, zaznacz pojedynczy wprowadzania kolumna dostępne.

  12. Na wejść i wyjść strona Script Editor transformacji, zaznacz opcję Wyjście 0 i zestaw jego SynchronousInputID none.Tworzenie kolumn wyjściowych 5, wszystkie typu ciąg [DT_STR] o długości 32:

    • FirstName

    • LastName

    • Tytuł

    • Miasto

    • StateProvince

  13. Na skryptu strona Script Editor transformacji, kliknij Edytowanie skryptu i wprowadź kod w ScriptMain klasy z przykładu.Zamknij środowiska programistycznego skryptu i Script Editor transformacji.

  14. Dodaj SQL Server docelowym przepływu danych.Skonfigurować go do używania menedżer połączeń OLE DB i tabela RowDelimitedData.Połącz wyjście składnik skryptów do obiekt docelowy.

  15. Uruchom pakiet.Po zakończeniu pakiet badanie rekordów w SQL Server obiekt docelowy tabela.

    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ędne rekordy

W tym przykładzie pokazano, jak plik tekstowy, w którym wiersz rozdzielający poprzedza rekordu wiersza nadrzędnego i następuje nieskończoną liczbę wierszy rekordów podrzędność, i przeanalizować go poprawnie znormalizowana nadrzędne i podrzędność obiekt docelowy tabel za pomocą składnika skryptów.Ten prosty przykład może być łatwo dostosowana do źródło 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 sposobem identyfikowania początek i koniec każdego rekordu.

PrzestrogaPrzestroga

Próbka ta jest przeznaczona tylko w celach demonstracyjnych.Jeżeli próbki są uruchamiane więcej niż raz, wstawia duplikat klucz wartości w tabela docelowej.

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

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

  1. Utwórz i Zapisz plik tekstowy o nazwie parentchilddata.txt zawiera następujące źródło 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 Kwerenda wykonać następujący skrypt w celu utworzenia tabel docelowych:

    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 utworzyć nowy Integration Services pakiet o nazwie SplitParentChild.dtsx.

  4. Dodawanie pliku prostego menedżer połączeń do pakiet, nadaj mu nazwę ParentChildData i skonfigurować go do łączenia 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 i bazy danych, w której utworzono obiekt docelowy tabele.

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

  7. Dodać płaski źródło pliku do przepływ danych i skonfigurować go do używania menedżer połączeń ParentChildData.Na kolumna strona Płaski Edytor źródła pliku, zaznacz pojedynczy zewnętrzny kolumna dostępne.

  8. Dodaj składnik skryptów dla przepływ danych i skonfiguruj ją jako transformacja.Połączyć wyjścia płaski plik źródłowy składnik skryptów.

  9. Kliknij dwukrotnie składnik skryptów, aby wyświetlić Script Editor transformacji.

  10. Na Wprowadzania kolumn strona Script Editor transformacji, zaznacz pojedynczy wprowadzania kolumna dostępne.

  11. Na wejść i wyjść strona Script Editor transformacji, zaznacz opcję Wyjście 0, zmień jego nazwę na ParentRecords, i zestaw jego SynchronousInputID none.Tworzenie kolumn wyjściowych 2:

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

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

  12. Tworzenie drugiego wyjścia i nadaj mu nazwę ChildRecords.SynchronousInputID Nowych danych wyjściowych jest już zestaw None.Tworzenie kolumn wyjściowych 3:

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

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

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

  13. Na skryptu strona Script Editor transformacji, kliknij Edytowanie skryptu.W ScriptMain klasy, należy wprowadzić kod pokazano na przykładzie.Zamknij środowiska programistycznego skryptu i Script Editor transformacji.

  14. Dodaj SQL Server docelowym przepływu danych.Połącz wyjście ParentRecords składnika skryptów do obiekt docelowy.Skonfigurować go do używania menedżer połączeń OLE DB i tabela rodziców.

  15. Dodać kolejne SQL Server docelowym przepływu danych.Połącz wyjście ChildRecords składnika skryptów do obiekt docelowy.Skonfigurować go do używania menedżer połączeń OLE DB i tabela dzieci.

  16. Uruchom pakiet.Po zakończeniu pakiet zbadać rekordy nadrzędne i podrzędność w dwóch SQL Server obiekt docelowy tabele.

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

    }
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.