Freigeben über


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

  1. Wählen Sie in der Dropdownliste Rechter Datenstrom den Datenstrom aus, den Sie auf Vorhandensein prüfen möchten.
  2. Geben Sie in der Einstellung Exist-Typ an, ob das Vorhandensein oder das Nichtvorhandensein der Daten geprüft werden soll.
  3. Legen Sie fest, ob Sie einen benutzerdefinierten Ausdruck verwenden möchten.
  4. 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.

Exists settings

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.

Exists custom settings

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

Broadcast Join

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:

Exists example

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

Ähnliche Transformationen sind Lookup und Join.