Bestaat transformatie 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.
De bestaande transformatie is een transformatie voor het filteren van rijen die controleert of uw gegevens zich in een andere bron of stroom bevinden. De uitvoerstroom bevat alle rijen in de linkerstroom die bestaan of die niet in de rechterstroom bestaan. De bestaanstransformatie is vergelijkbaar met SQL WHERE EXISTS
en SQL WHERE NOT EXISTS
.
Configuratie
- Kies welke gegevensstroom u controleert op bestaan in de vervolgkeuzelijst Rechtse stroom .
- Geef op of u op zoek bent naar de gegevens die al dan niet bestaan in de instelling Bestaan.
- Selecteer of u een aangepaste expressie wilt.
- Kies welke sleutelkolommen u wilt vergelijken als uw voorwaarden bestaan. 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.
Meerdere voorwaarden bestaan
Als u meerdere kolommen uit elke stroom wilt vergelijken, voegt u een nieuwe voorwaarde toe door op het pluspictogram naast een bestaande rij te klikken. Elke aanvullende voorwaarde wordt samengevoegd met een 'and'-instructie. Het vergelijken van twee kolommen is hetzelfde als de volgende expressie:
source1@column1 == source2@column1 && source1@column2 == source2@column2
Aangepaste expressie
Als u een vrije expressie wilt maken die andere operatoren bevat dan 'and' en 'is gelijk aan', selecteert u het veld Aangepaste expressie . Voer een aangepaste expressie in via de opbouwfunctie voor gegevensstroomexpressies door op het blauwe vak te klikken.
Als u dynamische patronen in uw gegevensstromen bouwt met behulp van 'late binding' van kolommen via schemadrift, kunt u de byName()
expressiefunctie gebruiken om de bestaande transformatie te gebruiken zonder de kolomnamen (bijvoorbeeld vroege binding) vast te stellen. Voorbeeld: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))
Optimalisatie van broadcasts
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.
Script voor gegevensstroom
Syntaxis
<leftStream>, <rightStream>
exists(
<conditionalExpression>,
negate: { true | false },
broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
) ~> <existsTransformationName>
Opmerking
Het onderstaande voorbeeld is een transformatie met de naam checkForChanges
die linkse stroom NameNorm2
en de rechterstream TypeConversions
neemt. De voorwaarde bestaat, is de expressie NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region
die waar retourneert als zowel de als Region
de EMPID
kolommen in elke stroom overeenkomen. Omdat we controleren op bestaan, negate
is onwaar. We schakelen geen uitzending in op het tabblad Optimaliseren, dus broadcast
heeft waarde 'none'
.
In de gebruikersinterface ziet deze transformatie eruit als in de onderstaande afbeelding:
Het gegevensstroomscript voor deze transformatie bevindt zich in het onderstaande codefragment:
NameNorm2, TypeConversions
exists(
NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
negate:false,
broadcast: 'auto'
) ~> checkForChanges