Förstå synkrona och asynkrona transformeringar

Gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

För att förstå skillnaden mellan en synkron och en asynkron transformation i Integration Services är det enklast att börja med en förståelse av en synkron transformation. Om en synkron transformation inte uppfyller dina behov kan din design kräva en asynkron transformation.

Synkrona transformationer

En synkron transformation bearbetar inkommande rader och skickar dem vidare i dataflödet, en rad i taget. Utgången är synkron med ingång, vilket betyder att den sker samtidigt. Därför behöver transformationen ingen information om andra rader i datamängden för att bearbeta en given rad. I själva implementationen grupperas rader i buffertar när de går från en komponent till nästa, men dessa buffertar är transparenta för användaren och du kan anta att varje rad behandlas separat.

Ett exempel på en synkron transformation är datakonverteringstransformationen. För varje inkommande rad konverterar den värdet i den angivna kolumnen och skickar raden vidare. Varje diskret konverteringsoperation är oberoende av alla andra rader i datamängden.

I Integration Services-skriptning och programmering specificerar du en synkron transformation genom att slå upp ID:t för en komponents indata och tilldela det till egenskapen SynchronousInputID för komponentens utdata. Detta säger åt dataflödesmotorn att bearbeta varje rad från indata och automatiskt skicka varje rad till de angivna utgångarna. Om du vill att varje rad ska gå till varje utdata behöver du inte skriva någon extra kod för att mata ut datan. Om du använder egenskapen ExclusionGroup för att ange att rader endast ska gå till en eller annan av en grupp av utdata, som i Conditional Split-transformationen, måste du anropa DirectRow-metoden för att välja lämplig destination för varje rad. När du har ett felutdata måste du anropa DirectErrorRow för att skicka rader med problem till felutdata istället för standardutdata.

Asynkrona transformationer

Du kan komma fram till att din design kräver en asynkron transformation när det inte är möjligt att bearbeta varje rad oberoende av alla andra rader. Med andra ord kan du inte skicka varje rad vidare i dataflödet medan den bearbetas, utan måste istället mata ut data asynkront, eller vid en annan tidpunkt, än indatan. Till exempel kräver följande scenarier en asynkron transformation:

  • Komponentens data måste samlas in flera buffertar innan den kan utföra sin bearbetning. Ett exempel är sorteringstransformationen, där komponenten måste bearbeta hela raden i en enda operation.

  • Komponenten måste kombinera rader från flera indata. Ett exempel är Merge-transformationen, där komponenten måste undersöka flera rader från varje indata och sedan slå ihop dem i sorterad ordning.

  • Det finns ingen en-till-en-korrespondens mellan indatarader och utgångsrader. Ett exempel är aggregattransformationen, där komponenten måste lägga till en rad i utdata för att hålla de beräknade aggregerade värdena.

I Integration Services-skriptning och programmering specificerar du en asynkron transformation genom att tilldela värdet 0 till egenskapen SynchronousInputID för komponentens utdata. . Detta säger åt dataflödesmotorn att inte automatiskt skicka varje rad till utgångarna. Sedan måste du skriva kod som skickar varje rad explicit till rätt utgång genom att lägga till den i den nya utdatabufferten som skapas för utdata från en asynkron transformation.

Anmärkning

Eftersom en källkomponent också uttryckligen måste lägga till varje rad som den läser från datakällan till sina utdatabuffertar, liknar en källa en transformation med asynkrona utdata.

Det skulle också vara möjligt att skapa en asynkron transformation som emulerar en synkron transformation genom att explicit kopiera varje indatarad till utdatan. Genom att använda detta tillvägagångssätt kan du byta namn på kolumner eller konvertera datatyper eller format. Denna metod försämrar dock prestandan. Du kan uppnå samma resultat med bättre prestanda genom att använda inbyggda Integration Services-komponenter, såsom Copy Column eller Data Conversion.