Transformations-Push-down – Übersicht

Um die Leistung Ihrer Datenpipelines zu verbessern, können Sie einige Transformationsvorgänge an BigQuery anstelle von Apache Spark übertragen. Der Transformations-Push-down bezieht sich auf eine Einstellung, mit der ein Vorgang in einer Cloud Data Fusion-Datenpipeline an BigQuery als Ausführungs-Engine übertragen werden kann. Der Vorgang und seine Daten werden daher an BigQuery übertragen und dort ausgeführt.

Durch Transformation Pushdown wird die Leistung von Pipelines mit mehreren komplexen JOIN-Vorgängen oder anderen unterstützten Transformationen verbessert. Einige Transformationen werden in BigQuery möglicherweise schneller ausgeführt als in Spark.

Nicht unterstützte Transformationen und alle Vorschautransformationen werden in Spark ausgeführt.

Unterstützte Transformationen

Transformation Pushdown ist in Cloud Data Fusion Version 6.5.0 und höher verfügbar. Einige der folgenden Transformationen werden jedoch erst in späteren Versionen unterstützt.

JOIN Vorgänge

  • Transformation Pushdown ist für JOIN-Vorgänge in Cloud Data Fusion Version 6.5.0 und höher verfügbar.

  • Es werden einfache (mit Schlüsselwörtern) und erweiterte JOIN-Vorgänge unterstützt.

  • Für die Ausführung in BigQuery müssen Joins genau zwei Eingabephasen haben.

  • Joins, die so konfiguriert sind, dass eine oder mehrere Eingaben in den Speicher geladen werden, werden in Spark statt in BigQuery ausgeführt, außer in den folgenden Fällen:

    • Wenn eine der Eingaben für den Join bereits per Pushdown übertragen wurde.
    • Wenn Sie den Join für die Ausführung in SQL Engine konfiguriert haben (siehe Option Stages to force execution).

BigQuery-Senke

Transformations-Push-down ist für die BigQuery-Senke in Cloud Data Fusion Version 6.7.0 und höher verfügbar.

Wenn die BigQuery-Senke auf eine Phase folgt, die in BigQuery ausgeführt wurde, wird der Vorgang, mit dem Datensätze in BigQuery geschrieben werden, direkt in BigQuery ausgeführt.

Um die Leistung mit diesem Senkenknoten zu verbessern, benötigen Sie Folgendes:

  • Das Dienstkonto muss die Berechtigung zum Erstellen und Aktualisieren von Tabellen im Dataset haben, das von der BigQuery-Senke verwendet wird.
  • Die für Transformation Pushdown verwendeten Datasets und der BigQuery-Sink müssen am selben Standort gespeichert werden.
  • Der Vorgang muss einer der folgenden sein:
    • Insert (die Option Truncate Table wird nicht unterstützt)
    • Update
    • Upsert

GROUP BY Aggregationen

Transformation Pushdown ist für GROUP BY-Aggregationen in Cloud Data Fusion Version 6.7.0 und höher verfügbar.

GROUP BY-Aggregationen in BigQuery sind für die folgenden Vorgänge verfügbar:

  • Avg
  • Collect List (NULL-Werte werden aus dem Ausgabearray entfernt)
  • Collect Set (NULL-Werte werden aus dem Ausgabearray entfernt)
  • Concat
  • Concat Distinct
  • Count
  • Count Distinct
  • Count Nulls
  • Logical And
  • Logical Or
  • Max
  • Min
  • Standard Deviation
  • Sum
  • Sum of Squares
  • Corrected Sum of Squares
  • Variance
  • Shortest String
  • Longest String

GROUP BY-Aggregationen werden in BigQuery in den folgenden Fällen ausgeführt:

  • Sie folgt auf eine Phase, die bereits nach unten verschoben wurde.
  • Sie haben sie so konfiguriert, dass sie in SQL Engine ausgeführt wird (siehe die Option Stages to force execution).

Aggregationen deduplizieren

Transformation Pushdown ist für Deduplizierungsaggregationen in Cloud Data Fusion Version 6.7.0 und höher für die folgenden Vorgänge verfügbar:

  • Es wurde kein Filtervorgang angegeben
  • ANY (ein Wert ungleich null für das gewünschte Feld)
  • MIN (der Mindestwert für das angegebene Feld)
  • MAX (der Maximalwert für das angegebene Feld)

Die folgenden Vorgänge werden nicht unterstützt:

  • FIRST
  • LAST

Die Deduplizierung von Aggregationen wird in der SQL-Engine in den folgenden Fällen ausgeführt:

  • Sie folgt auf eine Phase, die bereits nach unten verschoben wurde.
  • Sie haben sie so konfiguriert, dass sie in SQL Engine ausgeführt wird (siehe die Option Stages to force execution).

BigQuery-Quellen-Pushdown

BigQuery-Quellen-Push-down ist in Cloud Data Fusion-Versionen 6.8.0 und höher verfügbar.

Wenn auf eine BigQuery-Quelle eine Phase folgt, die mit BigQuery-Pushdown kompatibel ist, können alle kompatiblen Phasen der Pipeline in BigQuery ausgeführt werden.

Cloud Data Fusion kopiert die Datensätze, die zum Ausführen der Pipeline in BigQuery erforderlich sind.

Wenn Sie BigQuery Source Pushdown verwenden, bleiben die Eigenschaften für Tabellenpartitionierung und ‑clustering erhalten. So können Sie diese Eigenschaften nutzen, um weitere Vorgänge wie Joins zu optimieren.

Zusätzliche Anforderungen

Damit Sie BigQuery Source Pushdown verwenden können, müssen die folgenden Voraussetzungen erfüllt sein:

  • Das für BigQuery Transformation Pushdown konfigurierte Dienstkonto muss die Berechtigung zum Lesen von Tabellen im Dataset der BigQuery-Quelle haben.

  • Die in der BigQuery-Quelle verwendeten Datasets und das für die Pushdown-Transformation konfigurierte Dataset müssen am selben Standort gespeichert werden.

Window-Aggregationen

Transformation Pushdown ist für Window-Aggregationen in Cloud Data Fusion-Versionen 6.9 und höher verfügbar. Fensteraggregationen in BigQuery werden für die folgenden Vorgänge unterstützt:

  • Rank
  • Dense Rank
  • Percent Rank
  • N tile
  • Row Number
  • Median
  • Continuous Percentile
  • Lead
  • Lag
  • First
  • Last
  • Cumulative distribution
  • Accumulate

Fensteraggregationen werden in BigQuery in den folgenden Fällen ausgeführt:

  • Sie folgt auf eine Phase, die bereits nach unten verschoben wurde.
  • Sie haben sie so konfiguriert, dass sie in SQL Engine ausgeführt wird (siehe die Option Stages to force pushdown).

Wrangler-Filter-Pushdown

Wrangler Filter Pushdown ist in Cloud Data Fusion-Versionen 6.9 und höher verfügbar.

Wenn Sie das Wrangler-Plug-in verwenden, können Sie Filter, sogenannte Precondition-Vorgänge, so konfigurieren, dass sie in BigQuery anstelle von Spark ausgeführt werden.

Die Filter-Pushdown-Funktion wird nur im SQL-Modus für Vorbedingungen unterstützt, der ebenfalls in Version 6.9 veröffentlicht wurde. In diesem Modus akzeptiert das Plug-in einen Vorbedingungsausdruck in ANSI-Standard-SQL.

Wenn der SQL-Modus für Vorbedingungen verwendet wird, sind Anweisungen und benutzerdefinierte Anweisungen für das Wrangler-Plug-in deaktiviert, da sie mit Vorbedingungen im SQL-Modus nicht unterstützt werden.

Der SQL-Modus für Vorbedingungen wird für Wrangler-Plug-ins mit mehreren Eingaben nicht unterstützt, wenn die Transformationsauslagerung aktiviert ist. Wenn diese Wrangler-Phase mit SQL-Filterbedingungen mit mehreren Eingaben verwendet wird, wird sie in Spark ausgeführt.

Filter werden in BigQuery in den folgenden Fällen ausgeführt:

  • Sie folgt auf eine Phase, die bereits nach unten verschoben wurde.
  • Sie haben sie so konfiguriert, dass sie in SQL Engine ausgeführt wird (siehe die Option Stages to force pushdown).

Messwerte

Weitere Informationen zu den Messwerten, die Cloud Data Fusion für den Teil der Pipeline bereitstellt, der in BigQuery ausgeführt wird, finden Sie unter Messwerte für BigQuery-Pushdown-Pipelines.

Einsatzmöglichkeiten für den Transformations-Push-down

Die Ausführung von Transformationen in BigQuery umfasst Folgendes:

  1. Datensätze für unterstützte Phasen in Ihrer Pipeline in BigQuery schreiben.
  2. Ausführung unterstützter Phasen in BigQuery.
  3. Datensätze aus BigQuery lesen, nachdem die unterstützten Transformationen ausgeführt wurden, es sei denn, sie werden von einem BigQuery-Sink gefolgt.

Je nach Größe Ihrer Datasets kann es zu einem erheblichen Netzwerkaufwand kommen, der sich negativ auf die Gesamtausführungszeit der Pipeline auswirken kann, wenn das Transformations-Push-down aktiviert ist.

Aufgrund des Netzwerk-Overheads empfehlen wir Transformation Pushdown in den folgenden Fällen:

  • Mehrere unterstützte Vorgänge werden nacheinander ausgeführt (ohne Schritte zwischen den Phasen).
  • Die Leistungssteigerung durch die Ausführung der Transformationen in BigQuery im Vergleich zu Spark überwiegt die Latenz der Datenübertragung in und möglicherweise aus BigQuery.

Funktionsweise

Wenn Sie eine Pipeline ausführen, die den Transformations-Push-down verwendet, führt Cloud Data Fusion unterstützte Transformationsphasen in BigQuery aus. Alle anderen Phasen in der Pipeline werden in Spark ausgeführt.

Beim Ausführen von Transformationen:

  1. Cloud Data Fusion lädt die Eingabe-Datasets in BigQuery. Dazu werden Datensätze in Cloud Storage geschrieben und dann ein BigQuery-Ladejob ausgeführt.

  2. JOIN-Vorgänge und unterstützte Transformationen werden dann als BigQuery-Jobs mithilfe von SQL-Anweisungen ausgeführt.

  3. Wenn nach der Ausführung der Jobs eine weitere Verarbeitung erforderlich ist, können Datensätze aus BigQuery nach Spark exportiert werden. Wenn die Option Direktes Kopieren in BigQuery-Senken versuchen aktiviert ist und die BigQuery-Senke auf eine Phase folgt, die in BigQuery ausgeführt wurde, werden Datensätze jedoch direkt in die BigQuery-Senkentabelle des Ziels geschrieben.

Das folgende Diagramm zeigt, wie unterstützte Transformationen mit Transformation Pushdown in BigQuery anstelle von Spark ausgeführt werden.

Transformations-Push-down zu BigQuery in Cloud Data Fusion-Pipelines.

Best Practices

Cluster- und Executor-Größen anpassen

So optimieren Sie die Ressourcenverwaltung in Ihrer Pipeline:

  • Verwenden Sie die „richtige“ Anzahl an Cluster-Workern (Knoten) für eine Arbeitslast. Anders gesagt: Sie können den bereitgestellten Managed Service for Apache Spark-Cluster optimal nutzen, indem Sie die verfügbare CPU und den verfügbaren Arbeitsspeicher für Ihre Instanz vollständig nutzen und gleichzeitig von der Ausführungsgeschwindigkeit von BigQuery für große Jobs profitieren.

  • Verbessern Sie die Parallelität in Ihren Pipelines mithilfe von Autoscaling-Clustern.

  • Passen Sie Ihre Ressourcenkonfigurationen in den Phasen Ihrer Pipeline an, in denen Datensätze während Ihrer Pipelineausführung per Push übertragen oder aus BigQuery abgerufen werden.

Empfohlen: Experimentieren Sie mit der Erhöhung der Anzahl der CPU-Kerne für Ihre Executor-Ressourcen (bis zur Anzahl der von Ihrem Worker-Knoten verwendeten CPU-Kerne). Die Executors optimieren die CPU-Nutzung während der Serialisierungs- und Deserialisierungsschritte, wenn Daten in BigQuery ein- und ausgehen. Weitere Informationen finden Sie unter Clustergröße.

Ein Vorteil der Ausführung von Transformationen in BigQuery besteht darin, dass Ihre Pipelines in kleineren Managed Service for Apache Spark-Clustern ausgeführt werden können. Wenn Joins die ressourcenintensivsten Vorgänge in Ihrer Pipeline sind, können Sie mit kleineren Clustergrößen experimentieren, da die komplexen JOIN-Operationen nun in BigQuery verwendet werden, sodass Sie möglicherweise die Computing-Gesamtkosten reduzieren können.

Daten mit der BigQuery Storage Read API schneller abrufen

Nachdem BigQuery die Transformationen ausgeführt hat, kann Ihre Pipeline zusätzliche Phasen haben, die in Spark ausgeführt werden müssen. In Cloud Data Fusion-Version 6.7.0 und höher wird die BigQuery Storage Read API für den Transformations-Push-down unterstützt. Dadurch wird die Latenz verringert und Lesevorgänge in Spark werden beschleunigt. Dadurch kann die Gesamtausführungszeit der Pipeline verkürzt werden.

Die API liest Datensätze parallel. Wir empfehlen daher, die Executor-Größen entsprechend anzupassen. Wenn ressourcenintensive Vorgänge in BigQuery ausgeführt werden, können Sie die Speicherzuweisung für die Executors reduzieren, um die Parallelität bei der Ausführung der Pipeline zu verbessern (siehe Cluster- und Executor-Größen anpassen).

Die BigQuery Storage Read API ist standardmäßig deaktiviert. Sie können die Funktion in Ausführungsumgebungen aktivieren, in denen Scala 2.12 installiert ist, einschließlich Managed Service for Apache Spark 2.0 und Managed Service for Apache Spark 1.5.

Dataset-Größe berücksichtigen

Berücksichtigen Sie die Größen der Datasets in den JOIN-Vorgängen. Bei JOIN-Vorgängen, die eine erhebliche Anzahl von Ausgabedatensätzen generieren (z. B. etwas, das einem Kreuz-JOIN-Vorgang ähnelt), kann die resultierende Dataset-Größe um ein Vielfaches größer sein als das Eingabe-Dataset. Beachten Sie auch den Mehraufwand, um diese Datensätze wieder in Spark abzurufen, wenn eine zusätzliche Spark-Verarbeitung für diese Datensätze (z. B. eine Transformation oder eine Senke) im Kontext der gesamten Pipelineleistung erfolgt.

Verzerrte Daten minimieren

JOIN-Vorgänge für stark asymmetrische Daten können dazu führen, dass der BigQuery-Job die Grenzwerte für die Ressourcennutzung überschreitet und der JOIN-Vorgang fehlschlägt. Um dies zu verhindern, rufen Sie die Einstellungen des Joiner-Plug-ins auf und identifizieren Sie die Eingabe mit ungleich verteilten Daten im Feld Skewed Input Stage (Phase mit ungleich verteilten Daten). So kann Cloud Data Fusion die Eingaben so anordnen, dass das Risiko einer Überschreitung der Grenzwerte durch die BigQuery-Anweisung verringert wird.

Suchen Sie in den Einstellungen des Joiner-Plug-ins nach dem Feld „Skewed Input Stage“ (Phase mit ungleich verteilten Daten).

Nächste Schritte