Bedingtes Ausführen von Aufgaben in einem Azure Databricks-Auftrag

Standardmäßig wird eine Auftragsaufgabe ausgeführt, wenn ihre Abhängigkeiten ausgeführt wurden und alle erfolgreich waren. Sie können jedoch auch Aufgaben in einem Azure Databricks-Auftrag so konfigurieren, dass sie nur ausgeführt werden, wenn bestimmte Bedingungen erfüllt sind. Azure Databricks Jobs unterstützt die folgenden Methoden zum bedingten Ausführen von Aufgaben:

  • Sie können Run if-Abhängigkeiten angeben, um eine Aufgabe basierend auf dem Ausführungsstatus der Abhängigkeiten der Aufgabe auszuführen. Beispielsweise können Sie die Run if verwenden, um eine Aufgabe auszuführen, auch wenn einige oder alle ihrer Abhängigkeiten fehlgeschlagen sind, sodass Ihr Auftrag nach Fehlern wiederhergestellt und die Ausführung fortgesetzt werden kann.
  • Die Aufgabe If/else-Bedingung wird verwendet, um einen Teil eines Auftrags-DAG basierend auf den Ergebnissen eines booleschen Ausdrucks auszuführen. Mit der If/else condition-Aufgabe können Sie Ihrem Auftrag Verzweigungslogik hinzufügen. Führen Sie beispielsweise Transformationsaufgaben nur aus, wenn der Upstream-Erfassungsvorgang neue Daten hinzufügt. Führen Sie andernfalls Datenverarbeitungsaufgaben aus.

Hinzufügen der Run if-Bedingung einer Aufgabe

Sie können eine Run if-Bedingung konfigurieren, wenn Sie eine Aufgabe mit einer oder mehreren Abhängigkeiten bearbeiten. Um der Aufgabe die Bedingung hinzuzufügen, wählen Sie die Bedingung im Dropdownmenü Run if-Abhängigkeiten in der Aufgabenkonfiguration aus. Die Run if-Bedingung wird ausgewertet, nachdem alle Auftragsabhängigkeiten abgeschlossen wurden. Sie können auch eine Run if-Bedingung hinzufügen, wenn Sie eine neue Aufgabe mit einer oder mehreren Abhängigkeiten hinzufügen.

Optionen für Run if-Bedingung

Sie können einer Aufgabe die folgenden Run if-Bedingungen hinzufügen:

  • Alle erfolgreich: Alle Abhängigkeiten wurden ausgeführt und waren erfolgreich. Dies ist die Standardbedingung zum Ausführen einer Aufgabe. Die Aufgabe wird als Upstream failed gekennzeichnet, wenn die Bedingung nicht erfüllt ist.
  • Mindestens eine erfolgreich: Mindestens eine Abhängigkeit war erfolgreich. Die Aufgabe wird als Upstream failed gekennzeichnet, wenn die Bedingung nicht erfüllt ist.
  • Keine fehlgeschlagen: Keine der Abhängigkeiten ist fehlgeschlagen, und es wurde mindestens eine Abhängigkeit ausgeführt. Die Aufgabe wird als Upstream failed gekennzeichnet, wenn die Bedingung nicht erfüllt ist.
  • Alles erledigt: Die Aufgabe wird ausgeführt, nachdem alle Abhängigkeiten ausgeführt wurden, unabhängig vom Status der abhängigen Ausführungen. Mit dieser Bedingung können Sie eine Aufgabe definieren, die unabhängig vom Ergebnis ihrer abhängigen Aufgaben ausgeführt wird.
  • Mindestens eine fehlgeschlagen: Mindestens eine Abhängigkeit ist fehlgeschlagen. Die Aufgabe wird als Excluded gekennzeichnet, wenn die Bedingung nicht erfüllt ist.
  • Alle fehlgeschlagen: Alle Abhängigkeiten sind fehlgeschlagen. Die Aufgabe wird als Excluded gekennzeichnet, wenn die Bedingung nicht erfüllt ist.

Hinweis

  • Aufgaben, die für die Behandlung von Fehlern konfiguriert sind, werden als Excluded gekennzeichnet, wenn ihre Run if-Bedingung nicht erfüllt ist. Ausgeschlossene Aufgaben werden übersprungen und als erfolgreich behandelt.
  • Wenn alle Aufgabenabhängigkeiten ausgeschlossen werden, wird auch die Aufgabe ausgeschlossen, unabhängig von ihrer Run if-Bedingung.
  • Wenn Sie eine Aufgabenausführung abbrechen, wird der Abbruch über Downstreamaufgaben weitergegeben, und Aufgaben mit einer Run if-Bedingung, die Fehler behandelt, werden ausgeführt, um beispielweise sicherzustellen, dass eine Bereinigungsaufgabe ausgeführt wird, wenn eine Aufgabenausführung abgebrochen wird.

Wie bestimmen Azure Databricks-Aufträge den Status der Auftragsausführung?

Azure Databricks-Aufträge bestimmen basierend auf dem Ergebnis der Blattaufgaben des Auftrags, ob eine Auftragsausführung erfolgreich war. Eine Blattaufgabe ist eine Aufgabe, die keine Downstreamabhängigkeiten aufweist. Eine Auftragsausführung kann eines von drei Ergebnissen haben:

  • Erfolgreich: Alle Aufgaben waren erfolgreich.
  • Erfolgreich mit Fehlern: Einige Aufgaben sind fehlgeschlagen, aber alle Blattaufgaben waren erfolgreich.
  • Fehler: Ein oder mehrere Blattaufgaben sind fehlgeschlagen.

Hinzufügen von Verzweigungslogik zu Ihrem Auftrag mit der If/else condition-Aufgabe

Verwenden Sie die If/else condition-Aufgabe, um einen Teil eines Auftrags-DAG basierend auf einem booleschen Ausdruck auszuführen. Der Ausdruck besteht aus einem booleschen Operator und einem Operandenpaar, wobei die Operanden mithilfe von Auftrags- und Vorgangsparametervariablen auf Auftrags- und Aufgabenparametervariablen verweisen oder Aufgabenwerte verwenden können.

Hinweis

  • Numerische und nicht numerische Werte werden je nach booleschem Operator unterschiedlich behandelt:
    • Die ==- und !=-Operatoren führen einen Zeichenfolgenvergleich ihrer Operanden durch. 12.0 == 12 ergibt beispielsweise „false“.
    • Die Operatoren >, >= und <= führen numerische Vergleiche ihrer Operanden durch. Beispielsweise wird 12.0 >= 12 als „true“ ausgewertet und 10.0 >= 12 als „false“ ausgewertet.
    • Nur numerische Werte, Zeichenfolgen und boolesche Werte sind zulässig, wenn in einem Operanden auf Aufgabenwerte verwiesen wird. Alle anderen Typen führen dazu, dass der Bedingungsausdruck fehlschlägt. Nicht-numerische Werttypen werden in Zeichenfolgen serialisiert und als Zeichenfolgen in If/else condition-Ausdrücken behandelt. Wenn beispielsweise ein Vorgangswert auf einen booleschen Wert festgelegt ist, wird er serialisiert in "true" oder "false".

Sie können eine If/else condition-Aufgabe hinzufügen, wenn Sie einen Auftrag erstellen oder eine Aufgabe in einem vorhandenen Auftrag bearbeiten. So konfigurieren Sie eine If/else condition-IdP:

  1. Wählen Sie im Dropdownmenü Typ die Option If/else condition aus.
  2. Geben Sie im ersten Bedingung-Textfeld den Operanden ein, der ausgewertet werden soll. Der Operand kann auf eine Auftrags- oder Aufgabenparametervariable oder auf einen Aufgabenwert verweisen.
  3. Wählen Sie im Dropdownmenü einen booleschen Operator aus.
  4. Geben Sie im zweiten Bedingung-Textfeld den Wert für die Auswertung der Bedingung ein.

So konfigurieren Sie Abhängigkeiten von einer If/else condition-Aufgabe:

  1. Wählen Sie die If/else condition-Aufgabe in der DAG-Ansicht aus, und klicken Sie auf + Aufgabe hinzufügen.
  2. Nachdem Sie Details für die Aufgabe eingegeben haben, klicken Sie auf Abhängig von und wählen Sie <task-name> (true) aus, wobei <task-name> der Name der If/else condition-Aufgabe ist.
  3. Wiederholen Sie diesen Vorgang für die Bedingung, die als false ausgewertet wird.

Angenommen, Sie haben eine Aufgabe mit dem Namen process_records, die eine Anzahl von Datensätzen verwaltet, die in einem Wert mit dem Namen bad_records ungültig sind, und Sie möchten die Verzweigungsverarbeitung basierend darauf ausführen, ob ungültige Datensätze gefunden werden. Um diese Logik ihrem Workflow hinzuzufügen, können Sie eine If/else condition-Aufgabe mit einem Ausdruck wie z. B. {{tasks.process_records.values.bad_records}} > 0 erstellen. Anschließend können Sie abhängige Aufgaben basierend auf den Ergebnissen der Bedingung hinzufügen.

Nachdem die Ausführung eines Auftrags mit einer If/else condition-Aufgabe abgeschlossen wurde, können Sie das Ergebnis des Ausdrucks und die Details der Ausdrucksauswertung anzeigen, wenn Sie die Auftragsausführungsdetails in der Benutzeroberfläche anzeigen.