Opis przekształceń synchronicznych i asynchronicznych

Dotyczy:SQL Server Środowisko SSIS Integration Runtime w usłudze Azure Data Factory

Aby zrozumieć różnicę między transformacją synchroniczną a asynchroniczną w usługach integracyjnych, najłatwiej zacząć od zrozumieniu transformacji synchronicznej. Jeśli transformacja synchroniczna nie spełnia Twoich potrzeb, Twój projekt może wymagać transformacji asynchronicznej.

Transformacje synchroniczne

Transformacja synchroniczna przetwarza przychodzące wiersze i przekazuje je dalej w przepływie danych wiersz po wierszu. Wyjście jest synchroniczne z wejściem, co oznacza, że dzieje się w tym samym czasie. Dlatego do przetworzenia danego wiersza transformacja nie wymaga informacji o innych wierszach w zestawie danych. W rzeczywistej implementacji wiersze są grupowane w bufory, przechodząc z jednego komponentu do drugiego, ale są one przezroczyste dla użytkownika i można założyć, że każdy wiersz jest przetwarzany osobno.

Przykładem transformacji synchronicznej jest transformacja konwersji danych. Dla każdego przychodzącego wiersza konwertuje wartość w podanej kolumnie i wysyła wiersz dalej. Każda operacja konwersji dyskretnej jest niezależna od wszystkich pozostałych wierszy w zestawie danych.

W skryptach i programowaniu usług integracyjnych określasz transformację synchroniczną, wyszukując ID wejścia komponentu i przypisując go do właściwości SynchronousInputID wyjść komponentu. To nakazuje silnikowi przepływu danych przetwarzać każdy wiersz z wejścia i automatycznie wysyłać każdy wiersz do określonych wyjść. Jeśli chcesz, aby każdy wiersz trafiał do każdego wyjścia, nie musisz pisać dodatkowego kodu, aby wyprowadzić dane. Jeśli użyjesz właściwości ExclusionGroup , aby określić, że wiersze powinny prowadzić tylko do jednej lub drugiej grupy wyników, jak w transformacji Conditional Split, musisz wywołać metodę DirectRow , aby wybrać odpowiedni cel dla każdego wiersza. Gdy masz wynik błędu, musisz wywołać DirectErrorRow , aby wysłać wiersze z problemami do wyjścia błędu zamiast domyślnego wyjścia.

Transformacje asynchroniczne

Możesz zdecydować, że Twój projekt wymaga transformacji asynchronicznej, gdy nie jest możliwe samodzielne przetwarzanie każdego wiersza od pozostałych. Innymi słowy, nie można przekazywać każdego wiersza w przepływie danych w trakcie przetwarzania, lecz trzeba je wyprowadzać asynchronicznie lub w innym czasie niż dane wejściowe. Na przykład następujące scenariusze wymagają transformacji asynchronicznej:

  • Komponent musi pobrać wiele buforów danych, zanim będzie mógł przeprowadzić przetwarzanie. Przykładem jest transformacja sortowania, gdzie komponent musi przetworzyć pełny zestaw wierszy w jednej operacji.

  • Komponent musi łączyć wiersze z wielu wejść. Przykładem jest transformacja Merge, gdzie komponent musi przeanalizować wiele wierszy z każdego wejścia, a następnie scalać je w posortowanej kolejności.

  • Nie ma jednorazowej korespondencji między wierszami wejściowymi a wierszami wyjściowymi. Przykładem jest transformacja agregatowa, gdzie komponent musi dodać wiersz do wyjścia, aby przechowywać obliczone wartości agregatu.

W skryptach i programowaniu usług integracyjnych określasz transformację asynchroniczną, przypisując wartość 0 do właściwości SynchronousInputID wyjść komponentu. . To mówi silnikowi przepływu danych, aby nie wysyłał każdego wiersza automatycznie do wyjść. Następnie musisz napisać kod, który wysyła każdy wiersz wyraźnie do odpowiedniego wyjścia, dodając go do nowego bufora wyjściowego utworzonego dla wyjścia transformacji asynchronicznej.

Note

Ponieważ komponent źródłowy musi również jawnie dodawać każdy wiersz odczytany ze źródła danych do swoich buforów wyjściowych, źródło przypomina transformację z asynchronicznymi wyjściami.

Możliwe byłoby także stworzenie asynchronicznej transformacji, która emuluje transformację synchroniczną poprzez jawne kopiowanie każdego wiersza wejściowego na wyjście. Stosując to podejście, możesz zmieniać nazwy kolumn lub konwertować typy lub formaty danych. Jednak takie podejście pogarsza wydajność. Podobne rezultaty z lepszą wydajnością można osiągnąć, korzystając z wbudowanych komponentów Integration Services, takich jak Copy Column czy Data Conversion.