Udostępnij za pośrednictwem


Tworzenie asynchronicznego transformacji przy użyciu składnik skryptów

Używanie składnika transformacja w przepływ danych Integration Services pakiet do modyfikowania i analizować dane, jak przekazaniem ze źródło do obiekt docelowy.transformacja z synchronicznej wyjść przetwarza każdego wiersza wejściowego, jak przechodziła przez składnik.transformacja z asynchronicznego wyjść może czekać do ukończenia przetwarzania transformacja otrzymał wszystkich wierszy danych wejściowych lub transformacja może wyjścia niektóre wiersze, zanim otrzymał wszystkich wierszy danych wejściowych.W tym temacie omówiono asynchronicznego transformacja.Jeśli Twój przetwarzania wymaga transformacja synchroniczne, zobacz Tworzenie synchroniczne transformacji przy użyciu składnik skryptów.Aby uzyskać więcej informacji na temat różnic między składnikami synchroniczne i asynchroniczne Zobacz Opis przekształcenia synchroniczne i asynchroniczne.

Aby uzyskać omówienie składnik skryptów, zobacz Rozszerzanie przepływu danych ze składnikiem skryptu.

Składnik skryptów i kodu infrastruktury, generujący można uprościć proces opracowywania niestandardowego składnik przepływ danych.Jednak aby zrozumieć, jak działa składnik skryptów, użytkownik może być przydatne odczytać kroków, które należy wykonać w tworzeniu niestandardowego składnik przepływ danych w Opracowywanie danych niestandardowy składnik przepływu sekcji, a szczególnie Rozwijanie składnika przekształcenie niestandardowe wyjść synchroniczne.

Wprowadzenie do składnika asynchronicznego transformacji

Po dodaniu składnika skryptów do przepływu danych karty SSIS Projektant, Wybieranie typu składnika skryptów pojawi się okno dialogowe monitem wstępnie skonfigurować składnika jako źródło, transformacja lub obiekt docelowy.W tym oknie dialogowym Wybierz transformacji.

Konfigurowanie składnika asynchronicznego transformacji w trybie projektowania metadanych

Po wybraniu opcji tworzenia składnika transformacja składnika można skonfigurować za pomocą Script Editor transformacja.Aby uzyskać więcej informacji, zobacz Konfigurowanie składnik skryptów w programie Script Editor składnika.

Wybierz język skryptu, który będzie używany składnik skryptów, możesz zestaw ScriptLanguage właściwość skryptu strona Script Editor transformacji okno dialogowe.

Ostrzeżenie

Aby zestaw domyślny język wykonywanie skryptów dla składnika wykonywanie skryptów, użyj język skryptowy opcji na Ogólne strona Opcje okno dialogowe.Aby uzyskać więcej informacji, zobacz Strony głównej.

Składnik transformacja przepływ danych ma jedno wejście i obsługuje jeden lub więcej wyjść.Konfigurowanie wejściowe i wyjściowe składnika jest jednym z kroków, które należy wykonać w trybie projektowania metadane za pomocą Script Editor transformacji, zanim napisać niestandardowy skrypt.

Konfigurowanie kolumn danych wejściowych

Składnik transformacja utworzonych za pomocą składnika skryptów ma pojedynczy wejście.

Na Kolumny wprowadzania strona Script Editor transformacji, lista kolumn pokazuje dostępne kolumny z danych wyjściowych składnik nadrzędny przepływ danych.Zaznacz kolumny, które chcesz przekształcić lub przechodzić.Oznacz wszystkie kolumny, które chcesz przekształcić w miejscu, w trybie odczytu i zapisu.

Więcej informacji o Kolumny wprowadzania strona Script Editor transformacji, zobacz Edytor skryptów transformacji (strona kolumn danych wejściowych).

Konfigurowanie nakładów, wyników oraz kolumn wyjściowych

Składnik transformacja obsługuje jeden lub więcej wyjść.

Często transformacja z wyjść asynchroniczny ma dwa wyjścia.Na przykład, gdy policzyć liczbę adresów z określonego miasta, warto przekazuje dane adres za pośrednictwem jednego wyniku podczas wysyłania wynik agregacja do innego wyjścia.Wyjście agregacja wymaga również nową kolumna danych wyjściowych.

Na wejść i wyjść strona Script Editor transformacji, zobaczysz, że utworzono jednego wyjście domyślnie, ale brak kolumn wyjściowych zostały utworzone.W tym strona edytora, można skonfigurować następujące elementy:

  • Można utworzyć jeden lub więcej dodatkowych wyjść, takie jak dane wyjściowe wynikiem agregacja.Użyj Dodać dane wyjściowe i Usunąć wyjściowego przyciski do zarządzania wyjść składnik asynchronicznego transformacja.Ustaw SynchronousInputID właściwość każdego wyjścia do zera, aby wskazać dane wyjściowe nie wystarczy przekazywanie danych od składnika nadrzędnego lub przekształcić go w miejscu, w istniejących wierszach i kolumnach.To ustawienie umożliwia wyjść asynchronicznego dane wejściowe.

  • Możesz przypisać przyjaznej nazwy wejściowe i wyjściowe.Składnik skryptów używa tych nazw do generowania właściwości metoda dostępu maszynowy, które będą używane do odwoływania się do danych wejściowych i wyprowadza w skrypcie.

  • Często asynchronicznego transformacja dodaje przepływ danych kolumn.Gdy SynchronousInputID Właściwość wyjściowy wynosi zero, wskazująca, że dane wyjściowe nie wystarczy przekazywanie danych od składnika nadrzędnego lub przekształcić go w miejscu, w istniejących wierszach i kolumnach, należy dodać i skonfigurować kolumn wyjściowych jawnie na wyjście.Kolumny wyjociowe nie muszą mieć tych samych nazw jako kolumny danych wejściowych, które są mapowane.

  • Można dodać więcej kolumn, które zawierają dodatkowe informacje.Należy napisać własny kod, aby wypełnić dodatkowe kolumny danych.Informacje powielania zachowanie wyjście błędu standardowego, zobacz Symulowanie wyjściowe błąd składnika skryptów.

Więcej informacji o wejść i wyjść strona Script Editor transformacji, zobacz Skrypt transformacji edytora (wejść i wyjść strony).

Dodawanie zmiennych

W przypadku wszelkich istniejących zmiennych wartości, których chcesz użyć skryptu, można dodać je w ReadOnlyVariables i ReadWriteVariables właściwość pola na skryptu strona Script Editor transformacji.

Po dodaniu wielu zmiennych w polach właściwość Zmienna nazwy należy oddzielić przecinkami.Wiele zmiennych można również wybrać, klikając przycisk wielokropka () przycisk Dalej, aby ReadOnlyVariables i ReadWriteVariables pola właściwość, a następnie wybierając zmiennych w wybierz zmienne okno dialogowe.

Aby uzyskać ogólne informacje dotyczące zmiennych składnika skryptów, zobacz Korzystanie ze zmiennych składnik skryptów.

Więcej informacji o skryptu strona Script Editor transformacji, zobacz Edytor skryptów transformacji (skrypt strony).

Składnik asynchronicznego transformacji w trybie projektowania kodu skryptów

Po skonfigurowaniu wszystkich metadane dla składnika można napisać niestandardowy skrypt.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.

Ważne informacje dotyczą wszystkich rodzajów składników utworzone przy użyciu składnik skryptów, zobacz Kodowanie i debugowanie składnika skryptów.

Opis automatycznie wygenerowany kod

Po otwarciu VSTA IDE po utworzeniu i konfigurowanie składnika transformacja, edytowalne ScriptMain klasy pojawi się w edytorze kodu z fragmentami dla ProcessInputRow i CreateNewOutputRows metody.ScriptMain Klasa jest gdzie napisać kod niestandardowy i ProcessInputRow jest metoda najważniejszych składników transformacja.CreateNewOutputRows Metoda więcej zazwyczaj służy składnik źródło asynchronicznego transformacja co przypomina, oba składniki należy utworzyć własne wiersze danych wyjściowych.

Jeśli otworzysz VSTA Eksplorator projektu okna, można wyświetlić składnik skryptów również został wygenerowany tylko do odczytu BufferWrapper i ComponentWrapper elementów projektu.ScriptMain Klasa dziedziczy z UserComponent klasy w ComponentWrapper element projektu.

Przy uruchomieniu czas, przepływ danych wywołania silnika PrimeOutput metoda w UserComponent klasy, które zastępuje PrimeOutput metoda ScriptComponent Klasa nadrzędnaPrimeOutput z kolei wywołuje metoda CreateNewOutputRows metoda.

Dalej, aparat przepływ danych wywołuje ProcessInput metoda w UserComponent klasy, które zastępuje ProcessInput metoda ScriptComponent Klasa nadrzędnaProcessInput z kolei pętli wierszy w buforze wejściowym i wywołania metoda ProcessInputRow jedną metodę czas dla każdego wiersza.

Pisanie kodu niestandardowego

Aby zakończyć tworzenie składnika niestandardowego asynchronicznego transformacja, należy użyć zastąpiona ProcessInputRow Metoda przetwarzania danych w każdym wierszu buforu wejściowego.Ponieważ wyjść nie są synchroniczne dane wejściowe, należy jawnie zapisać wierszy danych do wyjść.

W asynchronicznej transformacja, można użyć AddRow Metoda dodawania wierszy do wyjścia w zależności od wewnątrz ProcessInputRow lub ProcessInput metody.Nie trzeba używać CreateNewOutputRows metoda.Jeśli piszesz pojedynczy wiersz wyniki, takich jak agregacja wyniki do określonego wyjścia można utworzyć wiersz danych wyjściowych wcześniej za pomocą CreateNewOutputRows metoda i wypełnij jego wartości później, po przetworzeniu wszystkich wierszy danych wejściowych.Jednakże nie jest przydatne do tworzenia wielu wierszy CreateNewOutputRows metoda, ponieważ składnik skryptów tylko pozwala użyć bieżącego wiersza w danych wejściowych lub wyjściowych.CreateNewOutputRows Metoda jest ważniejsze w składniku źródło Jeżeli nie istnieją żadne wiersze wejściowe do procesu.

Można również zastąpić ProcessInput metoda, dzięki czemu można wykonać dodatkowe wstępne lub ostateczne przetwarzanie przed lub po pętli przez bufor wejściowy i wywołanie ProcessInputRow dla każdego wiersza.Na przykład jednego z przykładów kodu w tym temacie zastępuje ProcessInput policzyć liczbę adresów w określonym mieście jako ProcessInputRow pętle za pomocą wierszy. przykładzie zapisuje podsumowanie wartości wyjściowych drugi po przetworzeniu wszystkich wierszy.Przykład uzupełnia dane wyjściowe w ProcessInput , ponieważ buforów wyjściowych są już dostępne, gdy PostExecute jest nazywany.

W zależności od wymagań, można również napisać skrypt PreExecute i PostExecute metod dostępnych w ScriptMain klasy wykonywanie wszelkich wstępne lub ostateczne przetwarzanie.

Ostrzeżenie

Jeśli zostały opracowywania niestandardowego składnik przepływ danych od podstaw, istotne jest zastąpienie PrimeOutput metoda do pamięci podręcznej odniesienia do buforów wyjściowych, tak aby wiersze danych można dodać później do buforów.W składniku skryptu nie jest to konieczne ponieważ automatycznie generowanej klasy, reprezentujące każdy bufora wyjściowego BufferWrapper element projektu.

Przykład

Ten przykład demonstruje niestandardowy kod, który jest wymagany w ScriptMain klasy, aby utworzyć składnik asynchronicznego transformacja.

Ostrzeżenie

These examples use the Person.Address table in the AdventureWorks2008R2 sample database and pass its first and fourth columns, the int AddressID and nvarchar(30) City columns, through the data flow.Te same dane są używane w źródło, transformacja i przeznaczenia próbek w tej sekcji.Dodatkowe wymagania wstępne i założenia są udokumentowane na przykład każdy.

Ten przykład demonstruje asynchronicznego transformacja składnikiem dwa wyjścia.Wynikiem tej transformacja przechodzi przez AddressID i City kolumny Wyjście, podczas zlicza adresy znajdujące się w określonym mieście (Redmond, Washington, USA), a następnie wyprowadza wynikową wartość do drugiego wyjściowego.

Jeśli chcesz uruchamiać ten kod przykładowy, należy skonfigurować pakiet i składnik w następujący sposób:

  1. Dodaj nowy składnik skryptów do powierzchni projektanta przepływu danych i skonfiguruj ją jako transformacja.

  2. Wyjście źródło lub innego transformacja należy połączyć nowy składnik transformacja w projektancie.To wyjście powinno dostarczyć danych z Person.Address tabela AdventureWorks2008R2 przykładowej bazy danych, zawierający co najmniej AddressID i City kolumny.

  3. Otwórz Script Editor transformacji.Na Kolumny wprowadzania strona, zaznacz AddressID i City kolumny.

  4. Na wejść i wyjść strona Dodaj i skonfiguruj AddressID i City kolumn wyjściowych na pierwszym wyjściowego.Dodać drugi wyjścia i dodać kolumna wyprowadzenia dla wartości sumaryczne na wyjściu drugiego.Właściwość SynchronousInputID pierwszy wyjścia 0, ponieważ w tym przykładzie kopiuje każdego wiersza wejściowego jawnie wyjście pierwszego.Właściwość SynchronousInputID wyjście nowo utworzony jest już zestaw na 0.

  5. Zmienić dane wejściowe, wyjść i nadaj im nazwy opisowej nowa kolumna danych wyjściowych.W przykładzie użyto MyAddressInput jako nazwę input, MyAddressOutput i MySummaryOutput, aby wyjść i MyRedmondCount dla kolumna wyprowadzenia produkcja drugiego.

  6. Na skryptu strona, kliknij przycisk Edytowanie skryptu i wprowadź następujący skrypt.Następnie zamknij środowiska programistycznego skryptu i Script Editor transformacji.

  7. Tworzenie i konfigurowanie składnika docelowego dla pierwszego wyjścia, który oczekuje AddressID i City kolumny, takie jak SQL Server obiekt docelowy, lub składnika docelowego próbki wykazane w Tworzenie docelowych ze składnikiem skryptu,.Do Połącz wyjście pierwszego transformacja, MyAddressOutput, obiekt docelowy składnika.Można utworzyć obiekt docelowy tabela, uruchamiając następujące Transact-SQL w AdventureWorks2008R2 bazy danych:

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  8. Utwórz i skonfiguruj innego obiekt docelowy składnik drugiego wyjściowego.Do połączenia drugiego wyjściowych transformacja, MySummaryOutput, obiekt docelowy składnika.Ponieważ drugi wyjścia zapisuje jeden wiersz z pojedynczej wartości, łatwo można skonfigurować obiekt obiekt docelowy pliku prostego menedżer połączeń, który łączy się z nowego pliku, który ma jedną kolumna.W przykładzie tym obiekt docelowy kolumny o nazwie MyRedmondCount.

  9. Uruchom próbki.

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

    }

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

Pobieranie najnowszych artykułów, próbek i wideo z 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.