Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GILT FÜR:
Azure Data Factory
Azure Synapse Analytics
Tipp
Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!
Datenflüsse sind sowohl in Azure Data Factory-Pipelines als auch in Azure Synapse Analytics-Pipelines verfügbar. Dieser Artikel gilt für Datenflusszuordnungen. Wenn Sie mit Transformationen noch nicht fertig sind, lesen Sie den einführungsartikel Transformieren von Daten mithilfe von Zuordnungsdatenflüssen.
Mithilfe der Join-Transformation können Sie Daten aus zwei Quellen oder Streams in einem Zuordnungsdatenfluss miteinander kombinieren. Der Ausgabestream enthält alle Spalten aus beiden Quellen, die auf der Grundlage einer Verknüpfungsbedingung abgeglichen wurden.
Join-Typen
Mapping-Datenflüsse unterstützen derzeit fünf verschiedene Jointypen.
Inner Join
Bei einem inneren Join werden nur Zeilen ausgegeben, die übereinstimmende Werte in beiden Tabellen enthalten.
Linker äußerer Join
Bei einem linken äußeren Join werden alle Zeilen aus dem linken Stream sowie übereinstimmende Datensätze aus dem rechten Stream zurückgegeben. Ist für eine Zeile aus dem linken Stream keine Übereinstimmung vorhanden, werden die Ausgabespalten aus dem rechten Stream auf NULL festgelegt. Die Ausgabe besteht aus den von einem inneren Join zurückgegebenen Zeilen und den nicht übereinstimmenden Zeilen aus dem linken Stream.
Hinweis
Bei der von Datenflüssen verwendeten Spark-Engine wird aufgrund etwaiger kartesischer Produkte in Ihren Joinbedingungen gelegentlich ein Fehler auftreten. Wenn dies der Fall ist, können Sie zu einem benutzerdefinierten Cross Join wechseln und die Join-Bedingung manuell eingeben. Dies kann zu einer geringeren Leistung in Ihren Datenflüssen führen, da die Ausführungs-Engine u. U. alle Zeilen von beiden Seiten der Beziehung berechnen und dann Zeilen filtern muss.
Rechter äußerer Join
Bei einem rechten äußeren Join werden alle Zeilen aus dem rechten Stream sowie übereinstimmende Datensätze aus dem linken Stream zurückgegeben. Ist für eine Zeile aus dem rechten Stream keine Übereinstimmung vorhanden, werden die Ausgabespalten aus dem linken Stream auf NULL festgelegt. Die Ausgabe umfasst die von einem inneren Join zurückgegebenen Zeilen sowie die nicht übereinstimmenden Zeilen aus dem rechten Stream.
Vollständiger äußerer Join
Bei einem vollständigen äußeren Join werden alle Spalten und Zeilen von beiden Seiten ausgegeben, wobei für nicht übereinstimmende Spalten NULL-Werte verwendet werden.
Benutzerdefiniertes Kreuzprodukt
Bei Cross Join wird das Kreuzprodukt der beiden Streams basierend auf einer Bedingung ausgeführt. Geben Sie bei Verwendung einer anderen Bedingung als Gleichheit einen benutzerdefinierten Ausdruck als Kreuzverbindungskriterium an. Der Ausgabestream umfasst alle Zeilen, die der Verknüpfungsbedingung entsprechen.
Dieser Jointyp kann für Ungleichheitsverknüpfungen und OR-Bedingungen verwendet werden.
Wenn Sie explizit ein vollständiges kartesisches Produkt erzeugen möchten, verwenden Sie in jedem der beiden unabhängigen Datenströme vor der Verknüpfung die Transformation für abgeleitete Spalten, um einen synthetischen Schlüssel zum Abgleichen zu erstellen. Erstellen Sie z. B. mit der Transformation für abgeleitete Spalten in jedem Datenstrom eine neue Spalte mit dem Namen SyntheticKey und legen Sie sie auf 1 fest. Verwenden Sie dann a.SyntheticKey == b.SyntheticKey als benutzerdefinierten Joinausdruck.
Hinweis
Achten Sie darauf, dass Sie mindestens eine Spalte von jeder Seite der linken und rechten Beziehungen in eine benutzerdefinierte Kreuzverbindung einbeziehen. Die Ausführung von Cross Joins mit statischen Werten anstelle von Spalten von jeder Seite führt zu vollständigen Scans des gesamten Datensatzes, wodurch der Datenfluss schlecht abschneidet.
Fuzzy-Join
Sie können die Verknüpfung auf der Grundlage einer unscharfen Verknüpfungslogik anstelle eines exakten Abgleichs der Spaltenwerte vornehmen, indem Sie das Kontrollkästchen „Unscharfen Abgleich verwenden“ aktivieren.
- Textteile kombinieren: Verwenden Sie diese Option, um Übereinstimmungen zu finden, indem Sie Leerzeichen zwischen Wörtern entfernen. Zum Beispiel stimmt Data Factory mit DataFactory überein, wenn diese Option aktiviert ist.
- Spalte für die Ähnlichkeitsbewertung: Sie können optional wählen, ob Sie die Ähnlichkeitsbewertung für jede Zeile in einer Spalte speichern möchten, indem Sie hier einen neuen Spaltennamen eingeben, um diesen Wert zu speichern.
- Ähnlichkeitsschwellenwert: Wählen Sie einen Wert zwischen 60 und 100 als prozentuale Übereinstimmung zwischen den Werten in den von Ihnen ausgewählten Spalten.
Hinweis
Fuzzy-Übereinstimmung funktioniert derzeit nur mit Spalten vom Typ Zeichenfolgen und mit Inner Join-, Left Outer Join- und Full Outer Join-Typen. Sie müssen die Broadcast-Optimierung deaktivieren, wenn Sie Fuzzy-Matching-Joins verwenden.
Konfiguration
- Wählen Sie im Dropdown-Menü rechten Datenstrom aus, mit welchem Datenstrom Sie verknüpfen möchten.
- Wählen Sie den gewünschten Jointyp aus.
- Wählen Sie die Schlüsselspalten aus, auf denen der Abgleich für Ihre Verknüpfungsbedingung basieren soll. Standardmäßig sucht der Datenfluss nach Übereinstimmung mit einer Spalte in jedem Datenstrom. Wenn der Vergleich auf einem berechneten Wert basieren soll, zeigen Sie mit dem Mauszeiger auf die Dropdownliste für die Spalte, und wählen Sie Berechnete Spalte aus.
Nicht-Gleichheitsverknüpfungen
Wenn Sie in Ihren Joinbedingungen einen bedingten Operator wie „ungleich“ „(!=)“ oder „größer als“ (>) verwenden möchten, ändern Sie die Dropdownliste des Operators zwischen den beiden Spalten. Bei Nicht-Gleichheitsverknüpfungen muss mindestens einer der beiden Datenströme mithilfe der Übertragungsoption Fixed (Fest) auf der Registerkarte Optimieren übertragen werden.
Optimieren der Leistung beim Verknüpfen
Im Gegensatz zu „Merge Join“ in Tools wie SSIS ist die Join-Transformation kein obligatorischer Vorgang vom Typ „Merge Join“. Die Join-Schlüssel müssen nicht sortiert werden. Der Join-Vorgang erfolgt basierend auf dem optimalen Join-Vorgang in Spark (Broadcast- oder Map-Side-Join).
Falls bei den Transformationen Join, Lookup und Exists einer oder beide Datenströme in den Arbeitsspeicher des Workerknotens passen, können Sie die Leistung optimieren, indem Sie Broadcasting aktivieren. Standardmäßig entscheidet die Spark-Engine automatisch, ob eine Seite übertragen werden soll oder nicht. Klicken Sie auf Fest, um die zu übertragende Seite manuell auszuwählen.
Es wird nicht empfohlen, die Übertragung über die Option Off (Aus) zu deaktivieren, es sei denn, für Ihre Joins treten Timeoutfehler auf.
Selbstverknüpfung
Wenn Sie einen Datenstrom mit sich selbst verknüpfen möchten, müssen Sie einen vorhandenen Stream per Auswahltransformation mit einem Alias versehen. Erstellen Sie einen neuen Branch, indem Sie neben einer Transformation auf das Pluszeichen klicken und Neuer Branch auswählen. Fügen Sie eine Auswahltransformation hinzu, um den ursprünglichen Stream mit einem Alias zu versehen. Fügen Sie eine Join-Transformation hinzu. Wählen Sie dabei den ursprünglichen Stream als Linker Stream und die Auswahltransformation als Rechter Stream aus.
Testen der Join-Bedingungen
Verwenden Sie einen kleinen Satz bekannter Daten, wenn Sie die Join-Transformationen mit Datenvorschau im Debugmodus testen. Bei der Stichprobenentnahme aus einem umfangreichen Dataset können Sie nicht vorhersagen, welche Zeilen und Schlüssel zu Testzwecken gelesen werden. Das Ergebnis ist nicht deterministisch, daher kann es sein, dass Ihre Verknüpfungsbedingungen keine Übereinstimmungen zurückgeben.
Datenflussskript
Syntax
<leftStream>, <rightStream>
join(
<conditionalExpression>,
joinType: { 'inner'> | 'outer' | 'left_outer' | 'right_outer' | 'cross' }
broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
) ~> <joinTransformationName>
Beispiel für einen inneren Join
Das folgende Beispiel ist eine Join-Transformation namens JoinMatchedData, die den linken Stream TripData und den rechten Stream TripFare nimmt. Die Verknüpfungsbedingung ist der Ausdruck hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime}, der „true“ zurückgibt, wenn die Spalten hack_license, medallion, vendor_id und pickup_datetime in den beiden Streams übereinstimmen. Der Jointyp (joinType) lautet 'inner'. Da Broadcasting nur im linken Stream aktiviert wird, hat broadcast den Wert 'left'.
In der Benutzeroberfläche sieht diese Transformation wie in der folgenden Abbildung aus:
Das Datenflussskript für diese Transformation befindet sich im folgenden Codeausschnitt:
TripData, TripFare
join(
hack_license == { hack_license}
&& TripData@medallion == TripFare@medallion
&& vendor_id == { vendor_id}
&& pickup_datetime == { pickup_datetime},
joinType:'inner',
broadcast: 'left'
)~> JoinMatchedData
Beispiel für ein benutzerdefiniertes Cross Join
Das untenstehende Beispiel ist eine Join-Transformation mit dem Namen JoiningColumns, die den linken Stream LeftStream und den rechten Stream RightStream verwendet. Diese Transformation übernimmt zwei Streams und verknüpft alle Zeilen, in denen die Spalte leftstreamcolumn größer als die Spalte rightstreamcolumn ist. Der Verbindungstyp (joinType) ist cross. Broadcasting ist nicht aktiviert, broadcast weist den Wert 'none' auf.
In der Benutzeroberfläche sieht diese Transformation wie in der folgenden Abbildung aus:
Das Datenflussskript für diese Transformation befindet sich im folgenden Codeausschnitt:
LeftStream, RightStream
join(
leftstreamcolumn > rightstreamcolumn,
joinType:'cross',
broadcast: 'none'
)~> JoiningColumns
Zugehöriger Inhalt
Erstellen Sie nach dem Verknüpfen von Daten eine abgeleitete Spalte, und senken Sie Ihre Daten in einen Zieldatenspeicher.