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.
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
- Kies met welke gegevensstroom u deelneemt in de vervolgkeuzelijst Rechtse stroom .
- Selecteer uw jointype
- 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.
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.
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.
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.
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 TripFare
neemt. 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_license
kolommen medallion
in pickup_datetime
vendor_id
elke 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:
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 RightStream
neemt. 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:
Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:
LeftStream, RightStream
join(
leftstreamcolumn > rightstreamcolumn,
joinType:'cross',
broadcast: 'none'
)~> JoiningColumns
Gerelateerde inhoud
Nadat u gegevens hebt gekoppeld, maakt u een afgeleide kolom en sinkt u uw gegevens naar een doelgegevensarchief.