Tworzenie synchronicznej transformacji za pomocą składnika skryptu
Dotyczy:sql Server
SSIS Integration Runtime w usłudze Azure Data Factory
Składnik przekształcania w przepływie danych pakietu usług Integration Services służy do modyfikowania i analizowania danych w miarę ich wprowadzania ze źródła do miejsca docelowego. Transformacja z synchronicznymi danymi wyjściowymi przetwarza każdy wiersz wejściowy podczas przechodzenia przez składnik. Transformacja z asynchronicznymi danymi wyjściowymi oczekuje na odebranie wszystkich wierszy wejściowych w celu ukończenia przetwarzania. W tym temacie omówiono transformację synchroniczną. Aby uzyskać informacje na temat przekształceń asynchronicznych, zobacz
Aby zapoznać się z omówieniem składnika Skrypt, zobacz Rozszerzanie przepływu danych za pomocą składnika skryptu.
Składnik Script i kod infrastruktury, który generuje, znacznie upraszcza proces tworzenia niestandardowego składnika przepływu danych. Jednak aby zrozumieć, jak działa składnik Skrypt, warto zapoznać się z krokami, które należy wykonać podczas opracowywania niestandardowego składnika przepływu danych w sekcji Tworzenie niestandardowego składnika przepływu danych, a zwłaszcza Tworzenie składnika transformacji niestandardowej za pomocą synchronicznych danych wyjściowych.
Wprowadzenie do składnika przekształcania synchronicznego
Po dodaniu składnika Skrypt do okienka Przepływ danych projektanta usług SSIS zostanie otwarte okno dialogowe Wybierz typ składnika skryptu i zostanie wyświetlony monit o wybranie typu składnika Źródło, Miejsce docelowe lub Przekształcenie. W tym oknie dialogowym wybierz pozycję Transformation.
Konfigurowanie synchronicznego składnika przekształcania w trybie Metadata-Design
Po wybraniu opcji utworzenia składnika przekształcenia należy skonfigurować składnik przy użyciu edytora script transformation Editor. Aby uzyskać więcej informacji, zobacz Konfigurowanie składnika skryptu w edytorze składników skryptu.
Aby ustawić język skryptu dla składnika Script, należy ustawić właściwość
Nuta
Aby ustawić domyślny język skryptowy dla składnika Skrypt, użyj opcji języka skryptów
Składnik przekształcania przepływu danych ma jedno dane wejściowe i obsługuje co najmniej jedno wyjście. Skonfigurowanie danych wejściowych i wyjściowych składnika jest jednym z kroków, które należy wykonać w trybie projektowania metadanych przy użyciu edytora script transformation Editor, przed napisanie skryptu niestandardowego.
Konfigurowanie kolumn wejściowych
Składnik transformacji ma jedno dane wejściowe.
Na stronie Kolumny wejściowe edytora przekształcania skryptów na liście kolumn są wyświetlane dostępne kolumny z danych wyjściowych składnika nadrzędnego w przepływie danych. Wybierz kolumny, które chcesz przekształcić lub przekazać. Oznacz wszystkie kolumny, które mają zostać przekształcone w miejsce jako Odczyt/Zapis.
Aby uzyskać więcej informacji na temat kolumn wejściowych strony edytora transformacji skryptów , zobacz Script Transformation Editor (strona kolumn wejściowych).
Konfigurowanie danych wejściowych, wyjściowych i kolumn wyjściowych
Składnik transformacji obsługuje co najmniej jedno wyjście.
Na stronie Inputs and Outputs (Dane wejściowe i wyjściowe)Script Transformation Editorzobaczysz, że utworzono pojedyncze dane wyjściowe, ale dane wyjściowe nie zawierają kolumn. Na tej stronie edytora może być konieczne skonfigurowanie następujących elementów lub chcieć je skonfigurować.
Utwórz co najmniej jedno dodatkowe dane wyjściowe, takie jak symulowane dane wyjściowe błędu dla wierszy zawierających nieoczekiwane wartości. Użyj przycisków Add Output and Remove Output (Usuń dane wyjściowe), aby zarządzać danymi wyjściowymi składnika transformacji synchronicznej. Wszystkie wiersze wejściowe są kierowane do wszystkich dostępnych danych wyjściowych, chyba że chcesz przekierować każdy wiersz do jednego lub drugiego. Wskazujesz, że zamierzasz przekierować wiersze, określając niezerową wartość całkowitą dla właściwości ExclusionGroup w danych wyjściowych. Określona wartość całkowita wprowadzona w ExclusionGroup w celu zidentyfikowania danych wyjściowych nie jest znacząca, ale należy używać tej samej liczby całkowitej spójnie dla określonej grupy danych wyjściowych.
Nuta
Można również użyć wartości właściwości ExclusionGroup z pojedynczymi danymi wyjściowymi, gdy nie chcesz zwracać wszystkich wierszy. Jednak w tym przypadku należy jawnie wywołać metodę DirectRowTo<outputbuffer> dla każdego wiersza, który ma zostać wysłany do danych wyjściowych.
Przypisz bardziej opisową nazwę do danych wejściowych i wyjściowych. Składnik Script używa tych nazw do generowania typowanych właściwości dostępu, które będą używane do odwoływania się do danych wejściowych i wyjściowych skryptu.
Pozostaw kolumny tak, jak w przypadku przekształceń synchronicznych. Zazwyczaj transformacja synchroniczna nie dodaje kolumn do przepływu danych. Dane są modyfikowane w buforze, a bufor jest przekazywany do następnego składnika w przepływie danych. W takim przypadku nie trzeba dodawać i konfigurować kolumn wyjściowych jawnie w danych wyjściowych przekształcenia. Dane wyjściowe są wyświetlane w edytorze bez jawnie zdefiniowanych kolumn.
Dodaj nowe kolumny do symulowanych danych wyjściowych błędów dla błędów na poziomie wiersza. Zazwyczaj wiele danych wyjściowych w tym samym ExclusionGroup mają ten sam zestaw kolumn wyjściowych. Jeśli jednak tworzysz dane wyjściowe symulowanego błędu, możesz dodać więcej kolumn, aby zawierały informacje o błędzie. Aby uzyskać informacje o sposobie przetwarzania wierszy błędów przez aparat przepływu danych, zobacz Using Error Outputs in a Data Flow Component. Należy pamiętać, że w składniku Skrypt musisz napisać własny kod, aby wypełnić dodatkowe kolumny odpowiednimi informacjami o błędzie. Aby uzyskać więcej informacji, zobacz Symulowanie danych wyjściowych błędu dla składnika skryptu.
Aby uzyskać więcej informacji na temat danych wejściowych i wyjściowych strony Script Transformation Editor, zobacz Script Transformation Editor (Strona danych wejściowych i wyjściowych).
Dodawanie zmiennych
Jeśli chcesz użyć istniejących zmiennych w skrypcie, możesz dodać je na stronie ReadOnlyVariables i Pola właściwości ReadWriteVariablesna stronie script Script Editor.
Po dodaniu wielu zmiennych w polach właściwości rozdziel nazwy zmiennych przecinkami. Możesz również wybrać wiele zmiennych, klikając przycisk wielokropka (...) obok ReadOnlyVariables i pola właściwości ReadWriteVariables, a następnie wybierając zmienne w oknie dialogowym Wybierz zmienne.
Aby uzyskać ogólne informacje o sposobie używania zmiennych ze składnikiem Skrypt, zobacz Using Variables in the Script Component.
Aby uzyskać więcej informacji na temat strony skryptu
Wykonywanie skryptów składnika przekształcania synchronicznego w trybie Code-Design
Po skonfigurowaniu metadanych dla składnika możesz napisać skrypt niestandardowy. Na stronie
Aby uzyskać ważne informacje dotyczące wszystkich rodzajów składników utworzonych za pomocą składnika Script, zobacz Kodowanie i debugowanie składnika skryptu.
Informacje o kodzie generowanym automatycznie
Po otwarciu środowiska IDE VSTA po utworzeniu i skonfigurowaniu składnika transformacji edytowalny ScriptMain klasy pojawi się w edytorze kodu z wycinkiem metody ProcessInputRow. Klasa ScriptMain to miejsce, w którym napiszesz kod niestandardowy, a ProcessInputRow jest najważniejszą metodą w składniku przekształcania.
Jeśli otworzysz okno Project Explorer w narzędziu VSTA, zobaczysz, że składnik skryptu wygenerował również elementy projektu bufferWrapper i ComponentWrapper. Klasa ScriptMain dziedziczy z klasy UserComponent w elemencie projektu ComponentWrapper.
W czasie wykonywania aparat przepływu danych wywołuje metodę ProcessInput w klasie UserComponent, która zastępuje metodę ProcessInput klasy nadrzędnej ScriptComponent. Metoda ProcessInput z kolei przechodzi przez wiersze w buforze wejściowym i wywołuje metodę ProcessInputRow raz dla każdego wiersza.
Pisanie kodu niestandardowego
Składnik transformacji z synchronicznymi danymi wyjściowymi jest najprostszym składnikiem przepływu danych do zapisu. Na przykład przykład z pojedynczymi danymi wyjściowymi przedstawionymi w dalszej części tego tematu składa się z następującego kodu niestandardowego:
Row.City = UCase(Row.City)
Row.City = (Row.City).ToUpper();
Aby zakończyć tworzenie niestandardowego składnika przekształcania synchronicznego, należy użyć zastąpionej metody ProcessInputRow, aby przekształcić dane w każdym wierszu buforu wejściowego. Aparat przepływu danych przekazuje ten bufor, gdy jest pełny, do następnego składnika w przepływie danych.
W zależności od wymagań możesz również napisać skrypt w PreExecute i metody PostExecute dostępne w klasie ScriptMain, aby wykonać wstępne lub końcowe przetwarzanie.
Praca z wieloma danymi wyjściowymi
Kierowanie wierszy wejściowych do jednego z co najmniej dwóch możliwych danych wyjściowych nie wymaga znacznie więcej kodu niestandardowego niż omówiony wcześniej scenariusz pojedynczego wyjścia. Na przykład przykład dwóch danych wyjściowych przedstawiony w dalszej części tego tematu składa się z następującego kodu niestandardowego:
Row.City = UCase(Row.City)
If Row.City = "REDMOND" Then
Row.DirectRowToMyRedmondAddresses()
Else
Row.DirectRowToMyOtherAddresses()
End If
Row.City = (Row.City).ToUpper();
if (Row.City=="REDMOND")
{
Row.DirectRowToMyRedmondAddresses();
}
else
{
Row.DirectRowToMyOtherAddresses();
}
W tym przykładzie składnik Script generuje metody DirectRowTo<OutputBufferX> na podstawie nazw skonfigurowanych danych wyjściowych. Możesz użyć podobnego kodu, aby skierować wiersze błędów do symulowanych danych wyjściowych błędu.
Przykłady
W przykładach pokazano kod niestandardowy, który jest wymagany w klasie ScriptMain w celu utworzenia składnika przekształcenia synchronicznego.
Nuta
W tych przykładach użyto tabeli Person.Address w przykładowej bazie danych AdventureWorks i przekazaniu pierwszych i czwartych kolumn, intAddressID i nvarchar(30)City przez przepływ danych. Te same dane są używane w przykładach źródłowych, przekształceń i miejsc docelowych w tej sekcji. Dodatkowe wymagania wstępne i założenia są udokumentowane dla każdego przykładu.
Przykład przekształcenia synchronicznego pojedynczego wyjścia
W tym przykładzie pokazano synchroniczny składnik transformacji z pojedynczymi danymi wyjściowymi. Ta transformacja przechodzi przez kolumnę AddressID i konwertuje kolumnę City na wielkie litery.
Jeśli chcesz uruchomić ten przykładowy kod, musisz skonfigurować pakiet i składnik w następujący sposób:
Dodaj nowy składnik Skrypt do powierzchni projektanta przepływu danych i skonfiguruj go jako przekształcenie.
Połącz dane wyjściowe źródła lub innego przekształcenia z nowym składnikiem transformacji w programie SSIS Designer. Te dane wyjściowe powinny zawierać dane z tabeli Person.Address przykładowej bazy danych AdventureWorks zawierającej AddressID i kolumny City.
Otwórz edytor przekształceń skryptów . Na stronie kolumn wejściowych
wybierz kolumny AddressID iCity . Oznacz kolumnę City jako Odczyt/Zapis.Na stronie Inputs and Outputs zmień nazwę danych wejściowych i wyjściowych na bardziej opisowe nazwy, takie jak MyAddressInput i MyAddressOutput. Zwróć uwagę, że SynchronousInputID danych wyjściowych odpowiada identyfikatorowi danych wejściowych. W związku z tym nie trzeba dodawać i konfigurować kolumn wyjściowych.
Na stronie skryptu
kliknij pozycję Edytuj skrypt i wprowadź poniższy skrypt. Następnie zamknij środowisko programistyczne skryptu i edytor przekształcania skryptów .Utwórz i skonfiguruj składnik docelowy, który oczekuje AddressID i kolumn City, takich jak miejsce docelowe programu SQL Server, lub przykładowy składnik docelowy przedstawiony w Tworzenie miejsca docelowego za pomocą składnika skryptu. Następnie połącz dane wyjściowe przekształcenia ze składnikiem docelowym. Tabelę docelową można utworzyć, uruchamiając następujące polecenie Transact-SQL w bazie danych AdventureWorks:
CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL)
Uruchom przykład.
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
Row.City = UCase(Row.City)
End Sub
End Class
public class ScriptMain:
UserComponent
{
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
{
Row.City = (Row.City).ToUpper();
}
}
przykład przekształcenia synchronicznego Two-Output
W tym przykładzie pokazano synchroniczny składnik transformacji z dwoma danymi wyjściowymi. Ta transformacja przechodzi przez kolumnę AddressID i konwertuje kolumnę City na wielkie litery. Jeśli nazwa miasta to Redmond, kieruje wiersz do jednego danych wyjściowych; kieruje wszystkie inne wiersze do innych danych wyjściowych.
Jeśli chcesz uruchomić ten przykładowy kod, musisz skonfigurować pakiet i składnik w następujący sposób:
Dodaj nowy składnik Skrypt do powierzchni projektanta przepływu danych i skonfiguruj go jako przekształcenie.
Połącz dane wyjściowe źródła lub innego przekształcenia z nowym składnikiem transformacji w programie SSIS Designer. Te dane wyjściowe powinny zawierać dane z tabeli
Person.Address przykładowej bazy danych AdventureWorks zawierającej co najmniejAddressID i kolumnyCity .Otwórz edytor przekształceń skryptów . Na stronie kolumn wejściowych
wybierz kolumny AddressID iCity . Oznacz kolumnę City jako Odczyt/Zapis.Na stronie Inputs and Outputs (Dane wejściowe i wyjściowe) utwórz drugie dane wyjściowe. Po dodaniu nowych danych wyjściowych upewnij się, że ustawiono jego
SynchronousInputID do identyfikatoradanych wejściowych. Ta właściwość jest już ustawiona na pierwsze dane wyjściowe, które są tworzone domyślnie. Dla każdego danych wyjściowych ustaw właściwość ExclusionGroup na tę samą wartość inną niż zero, aby wskazać, że wiersze wejściowe zostaną podzielone między dwa wzajemnie wykluczające się dane wyjściowe. Nie trzeba dodawać żadnych kolumn wyjściowych do danych wyjściowych. Zmień nazwę danych wejściowych i wyjściowych na bardziej opisowe nazwy, takie jak MyAddressInput, MyRedmondAddressesi MyOtherAddresses.
Na stronie skryptu
kliknij pozycję Edytuj skrypt i wprowadź poniższy skrypt. Następnie zamknij środowisko programistyczne skryptu i edytor przekształcania skryptów .Utwórz i skonfiguruj dwa składniki docelowe, które oczekują AddressID i city kolumn, takich jak miejsce docelowe programu SQL Server, miejsce docelowe pliku prostego lub przykładowy składnik docelowy przedstawiony w Tworzenie miejsca docelowego za pomocą składnika skryptu. Następnie połącz każde z danych wyjściowych przekształcenia z jednym ze składników docelowych. Tabele docelowe można utworzyć, uruchamiając polecenie Transact-SQL podobne do następującego (z unikatowymi nazwami tabel) w bazie danych AdventureWorks:
CREATE TABLE [Person].[Address2] ( [AddressID] INT NOT NULL, [City] NVARCHAR(30) NOT NULL );
Uruchom przykład.
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)
Row.City = UCase(Row.City)
If Row.City = "REDMOND" Then
Row.DirectRowToMyRedmondAddresses()
Else
Row.DirectRowToMyOtherAddresses()
End If
End Sub
End Class
public class ScriptMain:
UserComponent
public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)
{
Row.City = (Row.City).ToUpper();
if (Row.City == "REDMOND")
{
Row.DirectRowToMyRedmondAddresses();
}
else
{
Row.DirectRowToMyOtherAddresses();
}
}
}
Zobacz też
Omówienie przekształceń synchronicznych i asynchronicznych
tworzenie przekształcenia asynchronicznego za pomocą składnika skryptu
tworzenie niestandardowego składnika transformacji przy użyciu synchronicznych danych wyjściowych