Share via


Transformatie samenvoegen in toewijzingsgegevensstroom

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Gegevensstromen zijn beschikbaar in Zowel Azure Data Factory als Azure Synapse Pipelines. Dit artikel is van toepassing op toewijzingsgegevensstromen. Als u geen ervaring hebt met transformaties, raadpleegt u het inleidende artikel Gegevens transformeren met behulp van een toewijzingsgegevensstroom.

Gebruik de jointransformatie om gegevens uit twee bronnen of streams in een toewijzingsgegevensstroom te combineren. De uitvoerstroom bevat alle kolommen uit beide bronnen die overeenkomen op basis van een joinvoorwaarde.

Jointypen

Toewijzingsgegevensstromen ondersteunen momenteel vijf verschillende jointypen.

Inner Join

Inner join levert alleen rijen op met overeenkomende waarden in beide tabellen.

Left Outer

Left outer join retourneert alle rijen uit de linkerstream en overeenkomende records uit de rechterstroom. Als een rij van de linkerstroom geen overeenkomst heeft, worden de uitvoerkolommen van de rechterstroom ingesteld op NULL. De uitvoer zijn de rijen die worden geretourneerd door een inner join plus de niet-overeenkomende rijen uit de linkerstroom.

Notitie

De Spark-engine die door gegevensstromen wordt gebruikt, mislukt af en toe vanwege mogelijke cartesische producten in uw joinvoorwaarden. Als dit het geval is, kunt u overschakelen naar een aangepaste cross join en handmatig uw joinvoorwaarde invoeren. Dit kan leiden tot tragere prestaties in uw gegevensstromen, omdat de uitvoeringsengine mogelijk alle rijen van beide zijden van de relatie moet berekenen en vervolgens rijen moet filteren.

Rechts buiten

Right outer join retourneert alle rijen uit de rechterstream en overeenkomende records uit de linkerstroom. Als een rij van de rechterstroom geen overeenkomst heeft, worden de uitvoerkolommen van de linkerstroom ingesteld op NULL. De uitvoer zijn de rijen die worden geretourneerd door een inner join plus de niet-overeenkomende rijen uit de rechterstream.

Full Outer

Met volledige outer join worden alle kolommen en rijen van beide zijden uitgevoerd met NULL-waarden voor kolommen die niet overeenkomen.

Aangepaste cross join

Cross join levert het crossproduct van de twee streams op basis van een voorwaarde. Als u een voorwaarde gebruikt die geen gelijkheid is, geeft u een aangepaste expressie op als uw cross join-voorwaarde. De uitvoerstroom bestaat uit alle rijen die voldoen aan de joinvoorwaarde.

U kunt dit jointype gebruiken voor niet-equi joins en OR voorwaarden.

Als u expliciet een volledig cartesisch product wilt produceren, gebruikt u de transformatie afgeleide kolom in elk van de twee onafhankelijke streams voordat de join een synthetische sleutel maakt om aan te sluiten. Maak bijvoorbeeld een nieuwe kolom in afgeleide kolom in elke stroom die wordt aangeroepen SyntheticKey en stel deze in op 1. a.SyntheticKey == b.SyntheticKey Gebruik vervolgens als uw aangepaste join-expressie.

Notitie

Zorg ervoor dat u ten minste één kolom van elke kant van de linker- en rechterrelatie in een aangepaste kruising opneemt. Het uitvoeren van cross joins met statische waarden in plaats van kolommen van elke zijde resulteert in volledige scans van de volledige gegevensset, waardoor uw gegevensstroom slecht presteert.

Fuzzy join

U kunt ervoor kiezen om lid te worden op basis van fuzzy joinlogica in plaats van exacte kolomwaardekoppeling door het selectievakje 'Fuzzy matching gebruiken' in te schakelen.

  • Tekstonderdelen combineren: gebruik deze optie om overeenkomsten te zoeken door spatie tussen woorden te verwijderen. Data Factory wordt bijvoorbeeld vergeleken met DataFactory als deze optie is ingeschakeld.
  • Vergelijkingsscorekolom: u kunt er eventueel voor kiezen om de overeenkomende score voor elke rij in een kolom op te slaan door hier een nieuwe kolomnaam in te voeren om die waarde op te slaan.
  • Drempelwaarde voor overeenkomsten: kies een waarde tussen 60 en 100 als een percentageovereenkomst tussen waarden in de kolommen die u hebt geselecteerd.

Fuzzy join

Notitie

Fuzzy matching werkt momenteel alleen met tekenreekskolomtypen en met inner-, left outer- en full outer join-typen. U moet de optimalisatie van de uitzending uitschakelen wanneer u fuzzing overeenkomende joins gebruikt.

Configuratie

  1. Kies met welke gegevensstroom u deelneemt in de vervolgkeuzelijst Rechtse stroom .
  2. Selecteer uw jointype
  3. Kies op welke sleutelkolommen u wilt overeenkomen voor uw joinvoorwaarde. Standaard zoekt de gegevensstroom naar gelijkheid tussen één kolom in elke stroom. Als u wilt vergelijken via een berekende waarde, plaatst u de muisaanwijzer op de vervolgkeuzelijst kolom en selecteert u Berekende kolom.

Schermopname van jointransformatie

Niet-equi joins

Als u een voorwaardelijke operator wilt gebruiken, zoals niet gelijk is aan (!=) of groter dan (>) in de joinvoorwaarden, wijzigt u de vervolgkeuzelijst van de operator tussen de twee kolommen. Voor niet-equi joins moet ten minste één van de twee streams worden uitgezonden met vaste uitzending op het tabblad Optimaliseren.

Niet-equi join

Joinprestaties optimaliseren

In tegenstelling tot samenvoegen in hulpprogramma's zoals SSIS, is de samenvoegtransformatie geen verplichte samenvoegbewerking. Voor de joinsleutels is geen sortering vereist. De join-bewerking vindt plaats op basis van de optimale joinbewerking in Spark, broadcast of join aan de kaartzijde.

Transformatie samenvoegen optimaliseren

In joins, zoekacties en bestaat transformatie, als een of beide gegevensstromen in het geheugen van het werkknooppunt passen, kunt u de prestaties optimaliseren door Broadcasting in te schakelen. Standaard bepaalt de spark-engine automatisch of er wel of niet één zijde moet worden uitgezonden. Als u handmatig wilt kiezen welke kant u wilt uitzenden, selecteert u Vast.

Het is niet raadzaam om uitzending uit te schakelen via de optie Uit , tenzij uw joins time-outfouten ondervinden.

Zelf deelnemen

Als u zelf een gegevensstroom met zichzelf wilt koppelen, moet u een bestaande stroom aliasen met een selectietransformatie. Maak een nieuwe vertakking door op het pluspictogram naast een transformatie te klikken en Nieuwe vertakking te selecteren. Voeg een selectietransformatie toe om de oorspronkelijke stream te aliasen. Voeg een jointransformatie toe en kies de oorspronkelijke stroom als de linkerstroom en de selectietransformatie als de rechterstroom.

Self-join

Voorwaarden voor het testen van joins

Wanneer u de jointransformaties test met een voorbeeld van gegevens in de foutopsporingsmodus, gebruikt u een kleine set bekende gegevens. Wanneer u rijen uit een grote gegevensset steekt, kunt u niet voorspellen welke rijen en sleutels worden gelezen voor tests. Het resultaat is niet-deterministisch, wat betekent dat uw joinvoorwaarden geen overeenkomsten mogen retourneren.

Script voor gegevensstroom

Syntaxis

<leftStream>, <rightStream>
    join(
        <conditionalExpression>,
        joinType: { 'inner'> | 'outer' | 'left_outer' | 'right_outer' | 'cross' }
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <joinTransformationName>

Voorbeeld van inner join

Het onderstaande voorbeeld is een jointransformatie met de naam JoinMatchedData die linkse stroom TripData en de rechterstream TripFareneemt. De joinvoorwaarde is de expressie hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime} die waar retourneert als de hack_licensekolommen medallionin pickup_datetime vendor_idelke stroom overeenkomen. Het joinType is 'inner'. We schakelen uitzenden alleen in de linkerstream in, dus broadcast heeft waarde 'left'.

In de gebruikersinterface ziet deze transformatie eruit als in de onderstaande afbeelding:

Schermopname van de transformatie met het tabblad Join-instellingen geselecteerd en een jointype Inner.

Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:

TripData, TripFare
    join(
        hack_license == { hack_license}
        && TripData@medallion == TripFare@medallion
        && vendor_id == { vendor_id}
        && pickup_datetime == { pickup_datetime},
        joinType:'inner',
        broadcast: 'left'
    )~> JoinMatchedData

Voorbeeld van aangepaste cross join

Het onderstaande voorbeeld is een jointransformatie met de naam JoiningColumns die linkse stroom LeftStream en de rechterstream RightStreamneemt. Deze transformatie neemt twee streams in beslag en voegt alle rijen samen waarbij de kolom leftstreamcolumn groter is dan de kolom rightstreamcolumn. Het joinType is cross. Broadcasting is not enabled broadcast has value 'none'.

In de gebruikersinterface ziet deze transformatie eruit als in de onderstaande afbeelding:

Schermopname van de transformatie met het tabblad Join-instellingen geselecteerd en een jointype Aangepast (kruislings).

Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:

LeftStream, RightStream
    join(
        leftstreamcolumn > rightstreamcolumn,
        joinType:'cross',
        broadcast: 'none'
    )~> JoiningColumns

Nadat u gegevens hebt gekoppeld, maakt u een afgeleide kolom en sinkt u uw gegevens naar een doelgegevensarchief.