Exists-Transformation in einem Zuordnungsdatenfluss
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 als auch in Azure Synapse-Pipelines verfügbar. Dieser Artikel gilt für Zuordnungsdatenflüsse. Wenn Sie noch nicht mit Transformationen arbeiten, lesen Sie den Einführungsartikel Transformieren von Daten mit einem Zuordnungsdatenfluss.
Die Exists-Transformation ist eine Zeilenfilterungstransformation, mit der geprüft wird, ob Ihre Daten in einer anderen Quelle oder einem anderen Datenstrom vorhanden sind. Der Ausgabedatenstrom enthält alle Zeilen im linken Datenstrom, die im rechten Datenstrom entweder vorhanden oder nicht vorhanden sind. Die Exists-Transformation ist mit SQL WHERE EXISTS
und SQL WHERE NOT EXISTS
vergleichbar.
Konfiguration
- Wählen Sie in der Dropdownliste Rechter Datenstrom den Datenstrom aus, den Sie auf Vorhandensein prüfen möchten.
- Geben Sie in der Einstellung Exist-Typ an, ob das Vorhandensein oder das Nichtvorhandensein der Daten geprüft werden soll.
- Legen Sie fest, ob Sie einen benutzerdefinierten Ausdruck verwenden möchten.
- Wählen Sie die Schlüsselspalten aus, die Sie als Exists-Bedingungen vergleichen möchten. 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.
Mehrere Exists-Bedingungen
Wenn Sie mehrere Spalten aus jedem Datenstrom vergleichen möchten, fügen Sie eine neue Exists-Bedingung hinzu, indem Sie auf das Pluszeichen neben einer vorhandenen Zeile klicken. Jede weitere Bedingung wird durch eine „und“-Anweisung verknüpft. Der Vergleich von zwei Spalten entspricht dem folgenden Ausdruck:
source1@column1 == source2@column1 && source1@column2 == source2@column2
Benutzerdefinierter Ausdruck
Zum Erstellen eines Freiformausdrucks, der andere Operatoren als „und“ und „gleich“ enthält, wählen Sie das Feld Benutzerdefinierter Ausdruck aus. Geben Sie einen benutzerdefinierten Ausdruck über den Datenfluss-Ausdrucks-Generator ein, indem Sie auf das blaue Feld klicken.
Wenn Sie in Ihren Datenflüssen dynamische Muster mithilfe der späten Bindung von Spalten über die Schemaabweichung erstellen, können Sie die byName()
-Ausdrucksfunktion verwenden, um die exists-Transformation ohne Hartcodierung der Spaltennamen (frühe Bindung) zu verwenden. Beispiel: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))
Broadcastoptimierung
Wenn bei Join, Lookup- und Exists-Transformationen der Arbeitsspeicher des Workerknotens groß genug für einen oder beide Datenströme ist, können Sie die Leistung optimieren, indem Sie die Übertragung 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 Aus zu deaktivieren, es sei denn, für Ihre Joins treten Timeoutfehler auf.
Datenflussskript
Syntax
<leftStream>, <rightStream>
exists(
<conditionalExpression>,
negate: { true | false },
broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
) ~> <existsTransformationName>
Beispiel
Das folgende Beispiel ist eine Exists-Transformation mit dem Namen checkForChanges
, die den linken Datenstrom NameNorm2
und den rechten Datenstrom TypeConversions
verwendet. Die Exists-Bedingung ist der Ausdruck NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region
, der „true“ zurückgibt, wenn sowohl die Spalte EMPID
als auch die Spalte Region
in den beiden Datenströmen übereinstimmen. Da auf Vorhandensein geprüft wird, entspricht negate
dem Wert „false“. Wir aktivieren auf der Registerkarte „Optimieren“ keine Übertragung, sodass broadcast
den Wert 'none'
hat.
Auf der Benutzeroberfläche sieht diese Umwandlung wie in der folgenden Abbildung aus:
Das Datenflussskript für diese Transformation befindet sich im folgenden Codeausschnitt:
NameNorm2, TypeConversions
exists(
NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
negate:false,
broadcast: 'auto'
) ~> checkForChanges