Synchrone en asynchrone transformaties begrijpen

Van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

Om het verschil tussen een synchrone en een asynchrone transformatie in Integration Services te begrijpen, is het het gemakkelijkst om te beginnen met een begrip van een synchrone transformatie. Als een synchrone transformatie niet aan uw behoeften voldoet, kan uw ontwerp een asynchrone transformatie vereisen.

Synchrone transformaties

Een synchrone transformatie verwerkt binnenkomende rijen en geeft ze één voor één door in de datastroom. Output is synchroon met input, wat betekent dat het tegelijkertijd plaatsvindt. Daarom heeft de transformatie om een bepaalde rij te verwerken geen informatie nodig over andere rijen in de dataset. In de daadwerkelijke implementatie worden rijen gegroepeerd in buffers terwijl ze van het ene component naar het andere gaan, maar deze buffers zijn transparant voor de gebruiker, en je kunt aannemen dat elke rij apart wordt verwerkt.

Een voorbeeld van een synchrone transformatie is de Data Conversietransformatie. Voor elke inkomende rij zet het de waarde in de opgegeven kolom om en stuurt de rij op zijn pad. Elke discrete conversiebewerking is onafhankelijk van alle andere rijen in de dataset.

In Integration Services-scripting en programmering specificeer je een synchrone transformatie door de ID van de input van een component op te zoeken en deze toe te wijzen aan de SynchronousInputID-eigenschap van de uitvoer van de component. Dit vertelt de dataflow-engine om elke rij vanuit de invoer te verwerken en elke rij automatisch naar de gespecificeerde uitgangen te sturen. Als je wilt dat elke rij naar elke output gaat, hoef je geen extra code te schrijven om de data uit te voeren. Als je de ExclusionGroup-eigenschap gebruikt om aan te geven dat rijen alleen naar één of een andere van een groep uitvoeren moeten gaan, zoals bij de Conditional Split-transformatie, moet je de DirectRow-methode aanroepen om de juiste bestemming voor elke rij te selecteren. Wanneer je een foutoutput hebt, moet je DirectErrorRow aanroepen om rijen met problemen naar de foutoutput te sturen in plaats van naar de standaarduitvoer.

Asynchrone transformaties

Je zou kunnen besluiten dat je ontwerp een asynchrone transformatie vereist wanneer het niet mogelijk is om elke rij onafhankelijk van alle andere rijen te verwerken. Met andere woorden, je kunt niet elke rij doorgeven in de datastroom terwijl deze wordt verwerkt, maar moet in plaats daarvan data asynchroon of op een ander tijdstip dan de invoer uitvoeren. Bijvoorbeeld, de volgende scenario's vereisen een asynchrone transformatie:

  • De component moet meerdere buffers data verzamelen voordat hij zijn verwerking kan uitvoeren. Een voorbeeld is de Sort-transformatie, waarbij de component de volledige set rijen in één enkele bewerking moet verwerken.

  • De component moet rijen van meerdere invoer combineren. Een voorbeeld is de Merge-transformatie, waarbij de component meerdere rijen van elke invoer moet onderzoeken en deze vervolgens in gesorteerde volgorde moet samenvoegen.

  • Er is geen één-op-één correspondentie tussen invoerrijen en uitvoerrijen. Een voorbeeld is de Aggregaattransformatie, waarbij de component een rij aan de output moet toevoegen om de berekende aggregaatwaarden te bevatten.

In Integration Services-scripting en programmering specificeer je een asynchrone transformatie door een waarde van 0 toe te wijzen aan de SynchronousInputID-eigenschap van de uitvoer van de component. . Dit vertelt de datastroommotor dat ze niet automatisch elke rij naar de uitgangen moet sturen. Vervolgens moet je code schrijven die elke rij expliciet naar de juiste uitvoer stuurt door deze toe te voegen aan de nieuwe uitvoerbuffer die wordt gemaakt voor de uitvoer van een asynchrone transformatie.

Note

Aangezien een broncomponent ook expliciet elke rij die hij uit de databron leest aan zijn outputbuffers moet toevoegen, lijkt een bron op een transformatie met asynchrone uitvoer.

Het zou ook mogelijk zijn om een asynchrone transformatie te maken die een synchrone transformatie emuleert door expliciet elke invoerrij naar de uitvoer te kopiëren. Door deze aanpak te gebruiken, kun je kolommen hernoemen of datatypen of -formaten converteren. Deze aanpak verslechtert echter de prestaties. Je kunt dezelfde resultaten bereiken met betere prestaties door gebruik te maken van ingebouwde integratieservicescomponenten, zoals Copy Column of Data Conversion.