Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Pro pochopení rozdílu mezi synchronní a asynchronní transformací v integračních službách je nejjednodušší začít pochopením synchronní transformace. Pokud synchronní transformace nesplňuje vaše požadavky, může váš návrh vyžadovat asynchronní transformaci.
Synchronní transformace
Synchronní transformace zpracovává příchozí řádky a předává je dál v datovém toku po řádcích. Výstup je synchronní se vstupem, což znamená, že probíhá současně. Proto pro zpracování daného řádku není potřeba pro transformaci informace o dalších řádcích v datové sadě. V samotné implementaci jsou řádky seskupovány do bufferů, když přecházejí z jedné komponenty do druhé, ale tyto buffery jsou pro uživatele transparentní a lze předpokládat, že každý řádek je zpracováván zvlášť.
Příkladem synchronní transformace je transformace Data Conversion. Pro každý příchozí řádek převede hodnotu ve zvoleném sloupci a odešle řádek dál. Každá diskrétní konverzní operace je nezávislá na všech ostatních řádcích v datové sadě.
Ve skriptování a programování Integration Services specifikujete synchronní transformaci tak, že vyhledáte ID vstupu komponenty a přiřadíte jej vlastnosti SynchronousInputID výstupů komponenty. To říká datovému tokovému enginu, aby zpracoval každý řádek ze vstupu a automaticky poslal každý řádek na určené výstupy. Pokud chcete, aby každý řádek šel ke každému výstupu, nemusíte psát žádný další kód pro výstup dat. Pokud použijete vlastnost ExclusionGroup k určení, že řádky by měly jít pouze do jedné nebo druhé skupiny výstupů, jako je to u transformace Conditional Split, musíte zavolat metodu DirectRow pro výběr vhodného cíle pro každý řádek. Když máte výstup chyby, musíte zavolat DirectErrorRow , který pošle řádky s problémy na chybový výstup místo výchozího výstupu.
Asynchronní transformace
Můžete se rozhodnout, že váš návrh vyžaduje asynchronní transformaci, když není možné zpracovávat každý řádek nezávisle na všech ostatních řádcích. Jinými slovy, nemůžete každý řádek předávat v datovém toku během jeho zpracování, ale musíte data vydat asynchronně nebo v jiném čase než vstup. Například následující scénáře vyžadují asynchronní transformaci:
Komponenta musí získat více datových bufferů, než může provést své zpracování. Příkladem je transformace Sort, kdy musí komponenta zpracovat celou sadu řádků v jedné operaci.
Komponenta musí kombinovat řádky z více vstupů. Příkladem je transformace Merge, kdy komponenta musí prozkoumat více řádků z každého vstupu a poté je sloučit v seřazeném pořadí.
Mezi vstupními a výstupními řádky neexistuje jednoznačná korespondence. Příkladem je agregátní transformace, kdy musí komponenta přidat řádek k výstupu, aby uchovala vypočtené agregované hodnoty.
Ve skriptování a programování Integration Services specifikujete asynchronní transformaci přiřazením hodnoty 0 vlastnosti SynchronousInputID výstupů komponenty. . To říká datovému proudovému enginu, aby neposílal každý řádek automaticky na výstupy. Pak musíte napsat kód, který každý řádek explicitně pošle na příslušný výstup přidáním do nového výstupního bufferu, který je vytvořen pro výstup asynchronní transformace.
Poznámka:
Protože zdrojová komponenta musí také explicitně přidat každý řádek, který načte ze zdroje dat, do svých výstupních bufferů, zdroj připomíná transformaci s asynchronními výstupy.
Bylo by také možné vytvořit asynchronní transformaci, která emuluje synchronní transformaci explicitním zkopírováním každého vstupního řádku do výstupu. Tímto přístupem můžete přejmenovávat sloupce nebo převádět datové typy či formáty. Tento přístup však snižuje výkon. Stejných výsledků s lepším výkonem můžete dosáhnout použitím vestavěných komponent Integration Services, jako je Copy Column nebo Data Conversion.