Udostępnij za pośrednictwem


Tworzenie transformacja asynchroniczny przy użyciu składnika skryptów

Składnik transformacja jest używany w przepływ danych Integration Services pakiet do modyfikowania i analizowania danych, gdy przechodzi od urządzenie źródłowe do obiekt docelowy. transformacja z wyjść synchronicznie przetwarza każdy wiersz danych wejściowych przechodząca składnika.transformacja z wyjść asynchroniczne mogą poczekać do zakończenia ich przetwarzania, aż do chwili, kiedy transformacja odebrał wszystkie wiersze danych wejściowych lub transformacja może wyprowadzić niektóre wiersze, zanim po odebraniu wszystkich wierszy danych wejściowych.W tym temacie omówiono asynchronicznego transformacja.Jeśli Twój przetwarzania wymaga synchroniczne transformacja, zobacz Tworzenie synchroniczne transformacja składnika skryptów. Aby uzyskać więcej informacji na temat różnic między składnikami synchronicznych i asynchronicznych zobacz Opis przekształcenia synchroniczne i asynchroniczne.

Aby zapoznać się z omówieniem składnika skryptów zobacz Rozszerzanie przepływ danych w składniku skryptów.

Składnik skryptów i kodu infrastruktury, który generuje można uprościć proces tworzenia niestandardowego składnik przepływ danych.Niemniej jednak, aby zrozumieć, w jaki sposób działa składnik skryptów, może się okazać, że przydatne do odczytania przez kolejne kroki, które należy wykonać w tworzeniu składnik przepływ danych niestandardowych Rozwijanie niestandardowy składnik przepływ danych sekcja, a zwłaszcza Rozwijanie składnik transformacja niestandardowe z synchroniczne wyjścia.

Wprowadzenie do składnika transformacja asynchroniczne

Po dodaniu składnika skryptów do karty przepływ danych SSIS Projektant, Wybierz typ składnika skryptów zostanie wyświetlone okno dialogowe, monitowania o wstępnie skonfigurować składnik jako urządzenie źródłowe, transformacja lub obiekt docelowy. W tym oknie dialogowym Wybierz transformacja.

Konfigurowanie składnika asynchronicznych transformacja w trybie projektowania metadane

Po wybraniu opcji tworzenia składnika transformacja należy skonfigurować składnika za pomocą Skrypt transformacja edytora.Aby uzyskać więcej informacji zobaczConfiguring the Script Component in the Script Component Editor.

Aby wybrać język skryptów, który będzie używany składnik skryptów, które zestaw ScriptLanguage Właściwość Skrypt stronaSkrypt transformacja edytora -okno dialogowe.

Uwaga

Aby ustawić domyślny język dla składnika skrypt skryptowy, za pomocą Język wykonywanie wykonywanie skryptów Opcja Ogólne stronaOpcje -okno dialogowe.Aby uzyskać więcej informacji zobaczStrona ogólnych.

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

Konfigurowanie kolumn wprowadzania

Składnik transformacja utworzone za pomocą składnika skryptów ma jeden dane wejściowe.

Na Kolumny danych wejściowych stronaSkrypt transformacja edytora, lista kolumn zawiera dostępne kolumny z danych wyjściowych "pod prąd" składnik przepływ danych.Zaznacz kolumny, którą chcesz przekształcić lub przechodzić przez.Oznacz wszystkie kolumny, które chcesz przekształcić w miejscu, w trybie odczytu/zapisu.

Aby uzyskać więcej informacji na temat Kolumny danych wejściowych stronaSkrypt transformacja edytora, see Skrypt transformacja Edytor (strona wprowadzania kolumny).

Konfigurowanie wejściowych, wyjść i kolumny wyjściowe

Składnik transformacja obsługuje jeden lub więcej wyników.

Często transformacja z wyjść asynchronicznego ma dwa wyjścia.Na przykład podczas liczenia liczbę adresów z określonego miasta, można do przekazywania danych adresów, za pośrednictwem jednego wyniku podczas wysyłania wynikiem agregacja do innej produkcji.Dane wyjściowe agregacja wymaga również nową kolumna danych wyjściowych.

Na Wejść i wyjść stronaSkrypt transformacja edytora, można zaobserwować, że utworzono jeden dane wyjściowe domyślnie, ale zostały utworzone żadne kolumny danych wyjściowych.Na tej stronie edytora można skonfigurować następujące elementy:

  • Można utworzyć jeden lub więcej dodatkowych wyjść, takie jak wyjściowego dla wyników agregacja.Użycie Dodawanie danych wyjściowych and Usuwanie danych wyjściowych przyciski do zarządzania wyjść składnika sieci asynchronicznej transformacja.Ustawianie SynchronousInputID Właściwość każdego dane wyjściowe do zera wskazywać, że dane wyjściowe nie tylko przekazywanie danych od składnika nadrzędnego lub przekształcić go w miejscu, w istniejących wierszach i kolumnach. Jest to ustawienie, dzięki któremu wyjść asynchronicznego w danych wejściowych.

  • Można 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 pisma, które będzie używany do odwoływania się do danych wejściowych i wyprowadza w skrypcie.

  • Często asynchronicznego transformacja dodaje kolumny dla przepływ danych.Gdy SynchronousInputID Właściwość produkcji wynosi zero, wskazująca, że dane wyjściowe nie tylko spełnia 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 dane wyjściowe. Kolumny wyjściowe nie muszą mieć tych samych nazw jako danych wejściowych kolumny, do którego 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.Aby uzyskać informacje na temat zachowania w wyniku standardowy błąd odtwarzania zobacz Symulowanie Error wyjścia dla składnika skryptów.

Aby uzyskać więcej informacji na temat Wejść i wyjść stronaSkrypt transformacja edytora, see Skrypt transformacja Edytor (wejściowych i wyjść strona).

Dodawanie zmiennych

W przypadku zmiennych istniejące wartości, których chcesz użyć w skrypcie, możesz je dodać w ReadOnlyVariables i ReadWriteVariables właściwość pola na Skrypt stronaSkrypt transformacja edytora.

Po dodaniu wielu zmiennych w polach właściwość nazwy zmiennych należy oddzielić przecinkami.Wiele zmiennych można także wybrać, klikając przycisk wielokropka () znajdujący się obok ReadOnlyVariables i ReadWriteVariables pola właściwość, a następnie wybierając zmiennych w Umożliwia wybór zmiennych -okno dialogowe.

Aby uzyskać ogólne informacje dotyczące sposobu korzystania ze składnikiem skrypt zmiennych zobacz Za pomocą zmiennych w składniku skryptów.

Aby uzyskać więcej informacji na temat Skrypt stronaSkrypt transformacja edytora, see Skrypt transformacja Edytor (skrypt strona).

Składnik asynchronicznych transformacja w trybie projektowania kodu wykonywanie wykonywanie skryptów

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

Aby uzyskać ważne informacje, dotyczy wszystkich rodzajów elementów utworzonych za pomocą składnika skryptów zobacz Kodowanie i debugowanie składnika skryptów.

Opis kod jest generowany automatycznie

Po otwarciu VSTA IDE po utworzeniu i konfigurowania składnika transformacja, edytowalnych ScriptMain Klasa pojawia się w edytorze kodu z procedur wejścia dla ProcessInputRow oraz CreateNewOutputRows metody. The ScriptMain class is where you will write your custom code, and ProcessInputRow is the most important metoda in a transformacja component. The CreateNewOutputRows metoda is more typically used in a urządzenie źródłowe component, which is like an asynchronous transformacja in that both components must create their own output rows.

W przypadku otwarcia VSTA Eksplorator projektu okna, można wyświetlić składnik skryptów wygenerował również tylko do odczytu BufferWrapper i ComponentWrapper elementy projektu. The ScriptMain class inherits from the UserComponent class in the ComponentWrapper project element.

W czasie wykonywania aparat przepływu danych wywołania PrimeOutput Metoda UserComponent klasy, która zastępuje PrimeOutput(Int32, array<Int32[], array<PipelineBuffer[]) Metoda ScriptComponent Klasa nadrzędna. The PrimeOutput metoda in turn calls the CreateNewOutputRows metoda.

Następnie wywołuje aparat przepływ danych ProcessInput Metoda UserComponent klasy, która zastępuje ProcessInput(Int32, PipelineBuffer) Metoda ScriptComponent Klasa nadrzędna. The ProcessInput metoda in turn loops through the rows in the input buffer and calls the ProcessInputRow metoda one czas for each row.

Zapisywanie swój kod niestandardowy

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

W asynchronicznego transformacja, można użyć AddRow metoda dodawania wierszy do wyjścia, w zależności od wewnątrz ProcessInputRow lub ProcessInput metoda. Nie trzeba używać CreateNewOutputRows Metoda. Jeden wiersz wyniki, takich jak agregacja wyniki, zapisuje się do określonego wyjścia, można utworzyć wiersza danych wyjściowych wcześniej przy użyciu CreateNewOutputRows Metoda i wypełnij jego wartości później, po przetwarzania wszystkich wprowadzania wierszy. Jednakże nie jest to 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. The CreateNewOutputRows metoda is more important in a urządzenie źródłowe component where there are no input rows to process.

Można również zastąpić ProcessInput Metoda, dzięki czemu możesz wykonać dodatkową wstępny lub końcowy przetwarzania przed lub po pętli przez bufor wejściowy i wywołania ProcessInputRow dla każdego wiersza. Na przykład jednym z przykładów kodu w tym temacie zastępuje ProcessInput Aby zliczyć liczbę adresów w określonym mieście jako ProcessInputRow pętle za pomocą wierszy. W przykładzie zapisuje wartości sumaryczne drugiego wyniku po przetworzeniu wszystkich wierszy. W przykładzie kończy się w danych wyjściowych w ProcessInput ponieważ Bufory wyjściowe nie są już dostępne podczas PostExecute nazywa się.

W zależności od wymagań, można również napisać skrypt PreExecute i PostExecute metody dostępne w ScriptMain Klasa wykonywać żadnych operacji wstępny lub końcowy.

Uwaga

Zostały opracowywania składnik przepływ danych niestandardowych od podstaw, jest ważne, aby zastąpić PrimeOutput Metoda do pamięci podręcznej odwołań do buforów danych wyjściowych, w którym można dodawać wierszy danych do buforów później. W składniku skryptów, to nie jest konieczny, ponieważ użytkownik ma do automatycznie generowanego klasy reprezentujące każdy bufor wyjściowy w BufferWrapper Element projektu.

Przykład

W przykładzie pokazano kod niestandardowy, który jest wymagany w ScriptMain Klasa utworzyć składnik asynchronicznego transformacja.

Uwaga

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.Te same dane, jest używany w źródle, przekształcania i próbek obiekt docelowy w tej sekcji.Dodatkowe wymagania wstępne i założenia są udokumentowane na przykład każdy.

W przykładzie pokazano składnika asynchronicznego transformacja z dwoma wyjść.Wynikiem tej transformacja przechodzi przez AddressID and Miasto kolumny do jednego wyjścia, podczas gdy zlicza adresy znajdujące się w określonym mieście (Redmond, Washington, USA), a następnie wyprowadza otrzymana wartość do drugiego wyniku.

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

  1. Dodać nowy składnik skryptów do powierzchni projektanta przepływ danych i skonfigurować go jako transformacja.

  2. Dane wyjściowe urządzenie źródłowe lub z innego transformacja połączyć się z nowym składnikiem transformacja w konstruktorze.Te dane wyjściowe należy podać dane z Person.Address tabelaAdventureWorks przykładowej bazy danych, na który zawiera co najmniej AddressID and Miasto kolumny.

  3. Otwórz Skrypt transformacja edytora.Na Kolumny danych wejściowych strona, zaznacz AddressID and Miasto kolumny.

  4. Na Wejść i wyjść strona, Dodaj i Konfiguruj AddressID and Miasto wyjściowe kolumn w pierwszym danych wyjściowych.Dodać drugą danych wyjściowych, a następnie dodaj kolumna wyprowadzenia dla wartości sumaryczne na drugim danych wyjściowych.zestaw Właściwość SynchronousInputID pierwszego danych wyjściowych na 0, ponieważ w tym przykładzie kopiuje każdy wiersz danych wejściowych jawnie w pierwszych danych wyjściowych.Właściwość SynchronousInputID dane wyjściowe w nowo utworzonym już jest ustawiona na 0.

  5. Zmień nazwę dane wejściowe, wyjściowe i nowej kolumna danych wyjściowych, aby nadać im bardziej opisowe nazwy.W przykładzie użyto MyAddressInput jako nazwy wejściowe, MyAddressOutput and MySummaryOutput dla wyjść i MyRedmondCount dla kolumna danych wyjściowych na drugim danych wyjściowych.

  6. Na Skrypt strona, kliknij przycisk Edytowanie skryptu i wpisz skrypt, który następuje.Następnie zamknij środowiska programistycznego skryptu, Skrypt transformacja edytora.

  7. Tworzenie i konfigurowanie składnika docelowego oczekuje, że pierwszy danych wyjściowych AddressID and Miasto kolumny, takie jak SQL Server obiekt obiekt docelowy lub składnika docelowego przykładowych pokazano w Tworzenie obiekt docelowy przy użyciu składnika skryptów, .Następnie połącz z pierwszym danych wyjściowych transformacja, MyAddressOutput, do obiekt docelowy składnika.Można utworzyć obiekt docelowy tabeli, uruchamiając następujące Transact-SQL polecenia w AdventureWorks bazy danych:

    CREATE TABLE [Person].[Address2](
        [AddressID] [int] NOT NULL,
        [City] [nvarchar](30) NOT NULL
    )
    
  8. Utwórz i skonfiguruj innego obiekt docelowy składnika do drugiego wydruku.Następnie z drugiego danych wyjściowych transformacja, MySummaryOutput, do obiekt docelowy składnika.Ponieważ druga dane wyjściowe powoduje zapisanie pojedynczy wiersz z pojedynczej wartości, można łatwo skonfigurować obiekt obiekt docelowy Menedżer połączeń plik prosty, który łączy się z nowego pliku, który ma jedną kolumna.W przykładzie nazwą jest to kolumna docelowa MyRedmondCount.

  9. Uruchom w próbce.

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

    }

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