Freigeben über


Optimieren von Transformationen

Verwenden Sie die folgenden Strategien, um die Leistung von Transformationen bei der Zuordnung von Datenflüssen in Azure Data Factory- und Azure Synapse Analytics-Pipelines zu optimieren.

Optimieren von Joins, Exists-Transformationen und Suchvorgängen

Rundfunk

Wenn bei Joins, Suchvorgängen 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. Die Übertragung erfolgt, wenn Sie kleine Datenframes an alle Knoten im Cluster senden. Dadurch kann das Spark-Modul eine Verknüpfung durchführen, ohne die Daten im großen Datenstrom erneut zu überführen. Standardmäßig entscheidet die Spark-Engine automatisch, ob eine Seite eines Joins übertragen werden soll. Wenn Sie mit Ihren eingehenden Daten vertraut sind und wissen, dass ein Datenstrom kleiner als der andere ist, können Sie "Feste Übertragung" auswählen. Bei der feststehenden Übertragung wird Spark gezwungen, den ausgewählten Datenstrom zu übertragen.

Wenn die Größe der übertragenen Daten für den Spark-Knoten zu groß ist, kann es zu einem Fehler wegen unzureichenden Arbeitsspeichers kommen. Verwenden Sie speicheroptimierte Cluster, um Speicherfehler zu vermeiden. Wenn bei den Datenflussausführungen Übertragungstimeouts auftreten, können Sie die Broadcastoptimierung deaktivieren. Dies führt jedoch zu langsamer arbeitenden Datenflüssen.

Für die Arbeit mit Datenquellen, die mehr Zeit für Abfragen erfordern (z. B. große Datenbankabfragen), wird empfohlen, die Übertragung für Joins zu deaktivieren. Quellen mit langen Abfragezeiten können Spark-Timeouts verursachen, wenn der Cluster versucht, an die Computeknoten zu senden. Eine weitere gute Wahl zum Deaktivieren der Übertragung ist, wenn Sie einen Datenstrom in Ihrem Datenfluss haben, der Werte für die spätere Verwendung in einer Nachschlagetransformation aggregiert. Dieses Muster kann den Spark-Optimierer verwechseln und Timeouts verursachen.

Optimieren der Join-Transformation

Kreuzprodukte

Wenn Sie Literalwerte in Ihren Verknüpfungsbedingungen verwenden oder mehrere Übereinstimmungen auf beiden Seiten einer Verknüpfung haben, führt Spark die Verknüpfung als Kreuzverknallung aus. Eine Kreuzverknüpfung ist ein vollständiges kartesisches Produkt, die anschließend die verknüpften Werte herausfiltert. Dies ist langsamer als andere Verknüpfungstypen. Stellen Sie sicher, dass Sie auf beiden Seiten Ihrer Verknüpfungsbedingungen über Spaltenverweise verfügen, um eine Beeinträchtigung der Leistung zu vermeiden.

Sortieren vor Joinvorgängen

Im Gegensatz zu „Merge Join“ in Tools wie SSIS ist die Join-Transformation kein obligatorischer Vorgang vom Typ „Merge Join“. Die Verknüpfungsschlüssel erfordern keine Sortierung vor der Transformation. Die Verwendung von Sortiertransformationen in Zuordnungsdatenflüssen wird nicht empfohlen.

Leistung der Fenstertransformation

Die Fenstertransformation in der Zuordnung von Datenfluss partitioniert Ihre Daten nach Wert in Spalten, die Sie als Teil der over() Klausel in den Transformationseinstellungen auswählen. Es gibt viele beliebte Aggregat- und Analysefunktionen, die in der Windows-Transformation verfügbar gemacht werden. Wenn Ihr Anwendungsfall jedoch das Generieren eines Fensters über dem gesamten Dataset für die Rangfolge rank() oder Zeilennummer rowNumber()ist, empfiehlt es sich, stattdessen die Rangtransformation und die Surrogate-Schlüsseltransformation zu verwenden. Diese Transformationen erzielen erneut bessere Ergebnisse bei vollständigen Dataset-Operationen unter Verwendung dieser Funktionen.

Neupartitionieren schiefer Daten

Bestimmte Transformationen, wie z. B. Verknüpfungen und Aggregate, ordnen Ihre Datenpartitionen neu an und können gelegentlich zu ungleich verteilten Daten führen. Schiefe Daten bedeuten, dass Daten nicht gleichmäßig über die Partitionen verteilt werden. Bei hoher Datenschiefe kann es zu einer Verlangsamung von nachgeschalteten Transformationen und Senkenschreibvorgängen kommen. Sie können die Datenschiefe bei Ihnen während einer Datenflussausführung jederzeit überprüfen, indem Sie in der Überwachungsanzeige auf die Transformation klicken.

Schiefe und Wölbung

Die Überwachungsanzeige zeigt, wie die Daten über jede Partition verteilt sind, sowie die beiden Metriken Schiefe und Kurtosis. Asymmetrie ist eine Messung der Asymmetrie der Daten und kann einen positiven, nullten, negativen oder undefinierten Wert haben. Negative Schiefe bedeutet, dass der linke Schwanz länger als der rechte ist. Kurtosis ist das Maß dafür, ob die Daten heavy-tailed oder light-tailed sind. Hohe Kurtosis-Werte sind nicht wünschenswert. Ideale Bereiche für die Datenschiefe liegen zwischen -3 und 3, und bei der Wölbung werden Werte angestrebt, die unter 10 liegen. Eine einfache Möglichkeit, diese Zahlen zu interpretieren, besteht darin, das Partitionsdiagramm zu betrachten und zu sehen, ob 1 Balken größer als der Rest ist.

Wenn Ihre Daten nach einer Transformation nicht gleichmäßig partitioniert werden, können Sie die Registerkarte "Optimieren" verwenden, um die Partition neu zu partitionieren. Das Umstrukturieren von Daten ist zeitaufwendig und verbessert möglicherweise die Leistung des Datenflusses nicht.

Tipp

Wenn Sie Ihre Daten neu partitionieren, aber über nachgeschaltete Transformationen verfügen, die Ihre Daten neu anfügen, verwenden Sie die Hashpartitionierung für eine Spalte, die als Verknüpfungsschlüssel verwendet wird.

Hinweis

Transformationen innerhalb des Datenflusses (mit Ausnahme der Sinktransformation) ändern die Datei- und Ordnerpartitionierung der ruhenden Daten nicht. Durch die Partitionierung in jeder Transformation werden die Daten innerhalb der Datenframes des temporären serverlosen Spark-Clusters, den ADF für jede Ihrer Datenflussausführungen verwaltet, neu partitioniert.

Weitere Artikel zum Datenfluss finden Sie in Bezug auf die Leistung: