Erstellen Sie eine Sequenz von Aufgaben mit einem Task-Graphen¶
In Snowflake können Sie mehrere Aufgaben mit einem Task-Graph verwalten, auch bekannt als Directed Acyclic Graph (DAG). Ein Task-Graph besteht aus einer Stammaufgabe und abhängigen untergeordneten Aufgaben. Die Abhängigkeiten müssen in einer Start-End-Richtung ohne Schleifen ausgeführt werden. Eine optionale letzte Aufgabe, die als Finalizer bezeichnet wird, kann Bereinigungsoperationen durchführen, nachdem alle anderen Aufgaben abgeschlossen sind.
Erstellen Sie Task-Graphen mit dynamischer Verhaltensweise, indem Sie logikbasierte Operationen im Textteil der Aufgabe unter Verwendung von Laufzeitwerten, Konfiguration auf Graph-Ebene und Rückgabewerten übergeordneter Aufgaben angeben.
Sie können Aufgaben und Task-Graphen mit den von unterstützten Sprachen und Tools wie SQL, JavaScript, Python, Java, Scala oder Snowflake Scripting erstellen. Dieses Thema enthält SQL-Beispiele. Beispiele für Python finden Sie unter Verwalten von Snowflake-Aufgaben und Task-Graphen mit Python.
Sie können auch Snowsight verwenden, um Ihre Task-Graphen zu verwalten und anzuzeigen. Weitere Informationen dazu finden Sie unter View tasks and task graphs in Snowsight.
Task-Graphen erstellen¶
Erstellen Sie mit CREATE TASK eine Stammaufgabe, und erstellen Sie dann mit CREATE TASK untergeordnete Aufgaben. AFTER, um die übergeordneten Aufgaben auszuwählen.
Die Stammaufgabe definiert, wann der Task-Graph läuft. Untergeordnete Aufgaben werden in der durch den Task-Graphen festgelegten Reihenfolge ausgeführt.
Wenn mehrere untergeordnete Aufgaben die gleiche übergeordnete Aufgabe haben, laufen die untergeordneten Aufgaben parallel.
Wenn eine Aufgabe mehrere übergeordnete Objekte hat, wartet die Aufgabe, bis alle vorangegangenen Aufgaben erfolgreich abgeschlossen sind, bevor sie startet. (Die Aufgabe kann auch ausgeführt werden, wenn einige übergeordnete Aufgaben übersprungen werden. Weitere Informationen dazu finden Sie unter Eine untergeordnete Aufgabe überspringen oder aussetzen).
Im folgenden Beispiel wird ein serverloser Task-Graph erstellt, der mit einer Stammaufgabe beginnt, die jede Minute ausgeführt werden soll. Die Stammaufgabe hat zwei untergeordnete Aufgaben, die parallel laufen. (Das Diagramm zeigt ein Beispiel, bei dem eine dieser Aufgaben länger läuft als die andere) Nachdem diese beiden Aufgaben abgeschlossen sind, wird eine dritte untergeordnete Aufgabe ausgeführt. Die Finalizer-Aufgabe wird ausgeführt, nachdem alle anderen Aufgaben abgeschlossen sind oder nicht abgeschlossen werden konnten:
Hinweise:
Ein Task-Graph ist auf maximal 1.000 Aufgaben beschränkt.
Eine einzelne Aufgabe kann maximal 100 übergeordnete Aufgaben und 100 untergeordnete Aufgaben haben.
Wenn Aufgaben parallel auf demselben vom Benutzer verwalteten Warehouse ausgeführt werden, müssen die Computeressourcen so bemessen sein, dass sie die gleichzeitigen Aufgabenläufe bewältigen können.
Finalizer-Aufgabe¶
Sie können eine optionale Finalizer-Aufgabe hinzufügen, die ausgeführt wird, nachdem alle anderen Aufgaben im Task-Graph abgeschlossen sind (oder nicht abgeschlossen wurden). Verwenden Sie dies, um Folgendes zu tun:
Bereinigungsoperationen durchführen, z. B. Bereinigung von nicht mehr benötigten Zwischendaten.
Senden Sie Benachrichtigungen über den Erfolg oder Misserfolg einer Aufgabe.
Um eine Finalizer-Aufgabe zu erstellen, verwenden Sie CREATE TASK. .. FINALIZE. .. für die Stammaufgabe. Beispiel:
Hinweise:
Eine Finalizer-Aufgabe ist immer mit einer Stammaufgabe (root task) verbunden. Jede Stammaufgabe kann nur eine Finalizer-Aufgabe haben und eine Finalizer-Aufgabe kann nur mit einer Stammaufgabe verbunden sein.
Wenn die Stammaufgabe eines Task-Graphen übersprungen wird (z. B. weil Task-Graph-Ausführungen überlappen), wird die Finalizer-Aufgabe nicht gestartet.
Eine Finalizer-Aufgabe kann keine untergeordneten Aufgaben haben.
Eine Finalizer-Aufgabe wird nur geplant, wenn keine anderen Aufgaben laufen oder in der Warteschlange des aktuellen Task-Graphen stehen.
Weitere Beispiele finden Sie unter Beispiel für eine Finalizer-Aufgabe: E-Mail-Benachrichtigung senden und Beispiel für eine Finalizer-Aufgabe: Fehler korrigieren.
Eigentümerschaft des Task-Graphen verwalten¶
Alle Aufgaben eines einfachen Task-Graphen müssen denselben Aufgabeneigentümer haben und in derselben Datenbank und in demselben Schema gespeichert sein.
Sie können die Eigentümerschaft an allen Aufgaben eines Task-Graphen mit einer der folgenden Aktionen übertragen:
Löschen des Eigentümers aller Aufgaben im Task-Graphen mit DROP ROLE. Snowflake überträgt die Eigentümerschaft an die Rolle, die den Befehl DROP ROLE ausführt.
Übertragen der Eigentümerschaft aller Aufgaben im Task-Graphen mit GRANT OWNERSHIP auf alle Aufgaben in einem Schema.
Wenn Sie die Eigentümerschaft der Aufgaben in einem Task-Graph mit diesen Methoden übertragen, behalten die Aufgaben im Task-Graphen ihre Beziehungen untereinander bei.
Durch das Übertragen der Eigentümerschaft einer einzelnen Aufgabe wird die Abhängigkeit zwischen der Aufgabe und allen über- und untergeordneten Aufgaben aufgehoben. Weitere Informationen dazu finden Sie unter Übergeordnete und untergeordnete Aufgaben trennen (unter diesem Thema).
Bemerkung
Die Datenbankreplikation funktioniert nicht für Task-Graphen, wenn das Diagramm einer anderen Rolle gehört als der Rolle, die die Replikation durchführt.
Aufgaben in einem Task-Graphen ausführen oder planen¶
Einen Task-Graphen manuell ausführen¶
Sie können eine einzelne Instanz eines Task-Graphen ausführen. Dies ist nützlich, um neue oder geänderte Task-Graphen zu testen, bevor Sie den Task-Graphen in der Produktion aktivieren, oder für einmalige Läufe nach Bedarf.
Bevor Sie den Task-Graphen starten, verwenden Sie ALTER TASK. .. RESUME für jede untergeordnete Aufgabe (einschließlich der optionalen Finalizer-Aufgabe), die Sie in den Lauf einbeziehen möchten.
Um eine einzelne Instanz eines Task-Graphen auszuführen, verwenden Sie EXECUTE TASK für die Stammaufgabe. Wenn Sie die Stammaufgabe ausführen, werden alle wiederaufgenommenen untergeordneten Aufgaben im Task-Graphen in der durch den Task-Graphen festgelegten Reihenfolge ausgeführt.
Eine Aufgabe nach einem Zeitplan oder als getriggerte Aufgabe ausführen¶
Legen Sie in der Stammaufgabe fest, wann der Task-Graph läuft. Task-Graphen können nach einem wiederkehrenden Zeitplan laufen oder durch ein Ereignis getriggert werden. Weitere Informationen dazu finden Sie unter folgenden Themen:
Um den Task-Graphen zu starten, können Sie einen der folgenden Schritte ausführen:
Setzen Sie jede einzelne untergeordnete Aufgabe (einschließlich des Finalizers) fort, die Sie in den Lauf einbeziehen möchten, und setzen Sie dann die Stammaufgabe fort, indem Sie ALTER TASK. .. RESUME verwenden.
Nehmen Sie alle Aufgaben in einem Task-Graphen auf einmal wieder auf, indem Sie SYSTEM$TASK_DEPENDENTS_ENABLE ( <root_task_name> ) für die Stammaufgabe verwenden.
Abhängige Aufgaben eines Task-Graphen anzeigen¶
Um die untergeordneten Aufgaben für eine Stammaufgabe anzuzeigen, rufen Sie die Tabellenfunktion TASK_DEPENDENTS auf. Um alle Aufgaben in einem Task-Graphen abzurufen, müssen Sie beim Aufrufen der Funktion die Stammaufgabe angeben.
Sie können auch Snowsight verwenden, um Ihre Task-Graphen zu verwalten und anzuzeigen. Weitere Informationen dazu finden Sie unter View tasks and task graphs in Snowsight.
Aufgaben ändern, aussetzen oder erneut versuchen¶
Ändern einer Aufgabe in einem Task-Graphen¶
Um eine Aufgabe in einem geplanten Task-Graphen zu ändern, setzen Sie die Stammaufgabe mit ALTER TASK. .. SUSPEND aus. Wenn ein Lauf des Task-Graphen in Bearbeitung ist, wird der aktuelle Lauf abgeschlossen. Alle zukünftigen geplanten Ausführungen der Stammaufgabe werden abgebrochen.
Wenn die Stammaufgabe ausgesetzt wird, behalten die untergeordneten Aufgaben, einschließlich der Finalizer-Aufgabe, ihren Status bei (ausgesetzt, ausgeführt oder abgeschlossen). Die untergeordneten Aufgaben müssen nicht einzeln ausgesetzt werden.
Nachdem Sie die Stammaufgabe ausgesetzt haben, können Sie jede Aufgabe im Task-Graphen ändern.
Um den Task-Graphen fortzusetzen, können Sie einen der folgenden Schritte ausführen:
Setzen Sie die Stammaufgabe mit ALTER TASK. .. RESUME fort. Einzelne untergeordnete Aufgaben, die vorher liefen, müssen nicht wieder aufgenommen werden.
Setzen Sie alle Aufgaben in einem Task-Graphen auf einmal fort, indem Sie SYSTEM$TASK_DEPENDENTS_ENABLE aufrufen und den Namen der Stammaufgabe übergeben.
Eine untergeordnete Aufgabe überspringen oder aussetzen¶
Um eine untergeordnete Aufgabe in einem Task-Graphen zu überspringen, setzen Sie die untergeordnete Aufgabe mit ALTER TASK. .. SUSPEND aus.
Wenn Sie eine untergeordnete Aufgabe aussetzen, läuft der Task-Graph weiter, als ob die untergeordnete Aufgabe erfolgreich gewesen wäre. Eine untergeordnete Aufgabe mit mehreren Vorgängern wird solange ausgeführt, bis sich mindestens einer der Vorgänger im Zustand „Fortgesetzt“ befindet und alle fortgesetzten Vorgänger erfolgreich zu Ende geführt werden.
Eine fehlgeschlagene Aufgabe wiederholen¶
Verwenden Sie EXECUTE TASK. .. RETRY LAST, um zu versuchen, den Task-Graphen der letzten fehlgeschlagenen Aufgabe auszuführen. Wenn die Aufgabe erfolgreich ist, werden alle untergeordneten Aufgaben weiter ausgeführt, sobald die vorangegangenen Aufgaben abgeschlossen sind.
Automatische Wiederholungsversuche¶
Wenn eine untergeordnete Aufgabe fehlschlägt, wird standardmäßig der gesamte Task-Graph als fehlgeschlagen betrachtet.
Anstatt auf die nächste geplante Ausführung des Task-Graphen zu warten, können Sie den Task-Graphen so anweisen, dass er die Ausführung sofort wiederholt, indem Sie den Parameter TASK_AUTO_RETRY_ATTEMPTS für die Stammaufgabe festlegen. Wenn eine untergeordnete Aufgabe fehlschlägt, wird für den gesamten Task-Graph sofort ein Wiederholungsversuch bis zu der angegebenen Anzahl von Versuchen durchgeführt. Wenn der Task-Graph dann immer noch nicht abgeschlossen wird, wird der Task-Graph als fehlgeschlagen betrachtet.
Task-Graphen nach fehlgeschlagenen Task-Graphen-Läufen aussetzen¶
Standardmäßig wird ein Task-Graph nach 10 aufeinanderfolgenden Fehlschlägen ausgesetzt. Sie können diesen Wert ändern, indem Sie SUSPEND_TASK_AFTER_NUM_FAILURES für die Stammaufgabe einstellen.
Wenn im folgenden Beispiel eine untergeordnete Aufgabe fehlschlägt, versucht der Task-Graph sofort zweimal, bevor der gesamte Task-Graph als fehlgeschlagen gilt. Wenn der Task-Graph dreimal hintereinander fehlschlägt, wird der Task-Graph ausgesetzt.
Übergeordnete und untergeordnete Aufgaben trennen¶
Abhängigkeiten zwischen Aufgaben in einem Task-Graphen können durch eine der folgenden Aktionen aufgelöst werden:
Mit ALTER TASK … REMOVE AFTER und ALTER TASK … UNSET FINALIZE kann die Verknüpfung zwischen der Zielaufgabe und den angegebenen übergeordneten Aufgaben oder der abgeschlossenen Stammaufgabe entfernt werden.
DROP TASK und GRANT OWNERSHIP trennen alle Verknüpfungen der Zielaufgabe. Beispiel: Stammaufgabe A hat eine untergeordnete Aufgabe B, und Aufgabe B hat eine untergeordnete Aufgabe C. Wenn Sie Aufgabe B löschen, wird die Verknüpfung zwischen Aufgabe A und Aufgabe B unterbrochen und damit auch die Verknüpfung zwischen Aufgabe B und Aufgabe C.
Wenn eine beliebige Kombination der oben genannten Aktionen die Beziehung zwischen der untergeordneten Aufgabe und allen übergeordneten Aufgaben aufhebt, dann wird die untergeordnete Aufgabe entweder eine eigenständige Aufgabe oder eine Stammaufgabe.
Bemerkung
Wenn Sie die Eigentümerschaft einer Aufgabe an den aktuellen Besitzer übertragen, werden die Abhängigkeitsverknüpfungen möglicherweise nicht getrennt.
Task-Graph-Ausführungen überlappen sich¶
Snowflake stellt standardmäßig sicher, dass jeweils nur eine Instanz eines bestimmten Task-Graphen ausgeführt wird. Die nächste Ausführung einer Stammaufgabe wird erst geplant, wenn die Ausführung aller Aufgaben im Task-Graphen beendet wurde. Das heißt, wenn die kumulierte Zeit, die für die Ausführung aller Aufgaben im Task-Graphen benötigt wird, die in der Definition der Stammaufgabe festgelegte explizit geplante Zeit überschreitet, wird mindestens eine Ausführung des Task-Graphen übersprungen.
Um die Parallelität von Task-Graphen zu steuern, verwenden Sie CREATE TASK oder ALTER TASK in der Stammaufgabe, um den Parameter OVERLAP_POLICY festzulegen:
OVERLAP_POLICY = NO_OVERLAP(Standard): Führt Aufgaben seriell ohne Parallelität aus. Snowflake plant die nächste Ausführung einer Stammaufgabe erst, wenn die Ausführung aller untergeordneten Aufgaben beendet wurde.OVERLAP_POLICY = ALLOW_CHILD_OVERLAP: Ermöglicht die Parallelität von untergeordneten Aufgaben. Wenn die nächste geplante Ausführungszeit der Stammaufgabe ansteht, während eine untergeordnete Aufgabe noch ausgeführt wird, startet Snowflake eine neue Instanz des Task-Graphen. Stammaufgaben überschneiden sich nie mit dieser Richtlinie.OVERLAP_POLICY = ALLOW_ALL_OVERLAP: Ermöglicht unbegrenzte echte Parallelität. Snowflake kann mehrere Instanzen des gesamten Task-Graphen, einschließlich der Stammaufgabe, gleichzeitig ausführen.
Überlappende Ausführungen können toleriert werden (oder sind sogar erwünscht), wenn SQL-Lese-/Schreiboperationen, die durch überlappende Ausführungen eines Task-Graphen ausgeführt werden, keine falschen oder duplizierten Daten erzeugen. Für andere Task-Graphen sollten Aufgabeneigentümer (die Rolle mit OWNERSHIP-Berechtigung für alle Aufgaben im Task-Graphen) einen geeigneten Zeitplan für die Stammaufgabe festlegen und eine geeignete Warehouse-Größe auswählen (oder serverlose Computeressourcen verwenden), um sicherzustellen, dass eine Instanz des Task-Graphen bis zum Ende ausgeführt wird, bevor die nächste Ausführung der Stammaufgabe geplant wird.
So stimmen Sie einen Task-Graphen besser mit dem in der Stammaufgabe definierten Zeitplan ab:
Erhöhen Sie, falls möglich, die Planungszeit zwischen den Ausführungen der Stammaufgabe.
Erwägen Sie, rechenintensive Aufgaben so zu ändern, dass sie serverlose Computeressourcen nutzen. Wenn die Aufgabe auf benutzerverwaltete Computeressourcen angewiesen ist, sollten Sie die Größe für das Warehouse erhöhen, das umfangreiche oder komplexe SQL-Anweisungen oder gespeicherte Prozeduren im Task-Graphen ausführt.
Analysieren Sie die SQL-Anweisungen oder gespeicherten Prozeduren, die von jeder Aufgabe ausgeführt werden. Stellen Sie fest, ob der Code umgeschrieben werden kann, um die Parallelverarbeitung zu nutzen.
Wenn keine der obigen Lösungen hilft, überlegen Sie, ob es notwendig ist, gleichzeitige Ausführungen des Task-Graphen durch Festlegen von OVERLAP_POLICY = ALLOW_CHILD_OVERLAP oder OVERLAP_POLICY = ALLOW_ALL_OVERLAP für die Stammaufgabe zuzulassen. Sie können diesen Parameter beim Erstellen einer Aufgabe (mit CREATE TASK) oder später (mit ALTER TASK oder in Snowsight) festlegen.
Versionierung¶
Wenn die Stammaufgabe in einem Task-Graphen fortgesetzt oder manuell ausgeführt wird, legt Snowflake eine Version für den gesamten Task-Graphen fest, einschließlich aller Eigenschaften für alle Aufgaben im Task-Graphen. Nachdem eine Aufgabe angehalten und geändert wird, legt Snowflake beim Fortsetzen oder manuellen Ausführen der Stammaufgabe eine neue Version fest.
Um eine beliebige Aufgabe in einem Task-Graphen zu ändern oder neu zu erstellen, muss zuerst die Stammaufgabe angehalten werden. Wenn die Stammaufgabe (Root Task) angehalten wird, werden alle zukünftigen geplanten Ausführungen der Stammaufgabe abgebrochen. Wenn sich Aufgaben jedoch gerade in Ausführung befinden, werden diese Aufgaben und alle nachfolgenden Aufgaben weiterhin mit der aktuellen Version ausgeführt.
Bemerkung
Wenn sich die Definition einer gespeicherten Prozedur, die von einer Aufgabe aufgerufen wurde, während der Ausführung des Task-Graphen ändert, kann der geänderte Code der gespeicherten Prozedur bei Aufruf durch die Aufgabe bereits in der aktuellen Ausführung zur Anwendung kommen.
Angenommen, die Stammaufgabe im Task-Graphen wird angehalten, aber eine geplante Ausführung dieser Aufgabe hat bereits begonnen. Der Eigentümer aller Aufgaben im Task-Graphen ändert den von einer untergeordneten Aufgabe aufgerufenen SQL-Code, während sich die Stammaufgabe noch in Ausführung befindet. Die untergeordnete Aufgabe wird ausgeführt und führt den SQL-Code in ihrer Definition aus, wobei die Version des Task-Graphen verwendet wird, die aktuell war, als die Ausführung der Stammaufgabe begann. Wenn die Stammaufgabe fortgesetzt oder manuell ausgeführt wird, wird eine neue Version des Task-Graphen erstellt. Diese neue Version enthält die an der untergeordneten Aufgabe vorgenommenen Änderungen.
Um den Versionsverlauf der Aufgabenversionen abzurufen, fragen Sie die Account Usage-Ansicht TASK_VERSIONS (in der freigegebenen SNOWFLAKE-Datenbank) ab.
Dauer des Task-Graphen¶
Die Dauer des Task-Graphen umfasst die Zeit zwischen dem geplanten Start der Stammaufgabe und der Beendigung der letzten untergeordneten Aufgabe. Um die Dauer eines Task-Graphen zu berechnen, fragen Sie Ansicht COMPLETE_TASK_GRAPHS ab und vergleichen SCHEDULED_TIME mit COMPLETED_TIME.
Das folgende Diagramm zeigt zum Beispiel einen Task-Graphen, der jede Minute ausgeführt werden soll. Die Stammaufgabe und ihre beiden untergeordneten Aufgaben stehen jeweils 5 Sekunden in der Warteschlange und laufen 10 Sekunden lang, so dass sie insgesamt 45 Sekunden benötigen.
Timeouts im Task-Graphen¶
Wenn USER_TASK_TIMEOUT_MS in der Stammaufgabe festgelegt ist, gilt das Timeout für den gesamten Task-Graphen.
Wenn USER_TASK_TIMEOUT_MS in einer untergeordneten Aufgabe oder Finalizer-Aufgabe eingestellt ist, gilt das Timeout nur für diese Aufgabe.
Wenn USER_TASK_TIMEOUT_MS sowohl in der Stammaufgabe als auch in einer untergeordneten Aufgabe festgelegt ist, hat das Timeout der untergeordneten Aufgabe Vorrang vor dem Timeout der Stammaufgabe für diese untergeordnete Aufgabe.
Hinweise¶
Bei serverlosen Aufgaben skaliert Snowflake automatisch die Ressourcen, um sicherzustellen, dass die Aufgaben innerhalb eines Zielintervalls abgeschlossen werden, einschließlich der Zeit für die Warteschlangenbildung.
Bei vom Benutzer verwalteten Aufgaben sind längere Wartezeiten üblich, wenn die Aufgaben in einem gemeinsam genutzten oder stark frequentierten Warehouse ausgeführt werden sollen.
Bei Task-Graphen kann die Gesamtzeit zusätzliche Wartezeit für untergeordnete Aufgaben enthalten, die auf die Fertigstellung ihrer Vorgänger warten.
Erstellen Sie einen Task-Graphen mit Logik (Laufzeitinformationen, Konfiguration und Rückgabewerte)¶
Aufgaben in einem Task-Graphen können Rückgabewerte von übergeordneten Aufgaben verwenden, um logikbasierte Operationen in ihrem Funktionskörper durchzuführen.
Hinweise:
Bei einigen logikbasierten Befehlen, wie SYSTEM$GET_PREDECESSOR_RETURN_VALUE, wird zwischen Groß- und Kleinschreibung unterschieden. Aufgaben, die mit CREATE TASK ohne Anführungszeichen erstellt werden, werden jedoch in Großbuchstaben gespeichert und aufgelöst. Um dies zu bewerkstelligen, können Sie eine der folgenden Möglichkeiten nutzen:
Erstellen Sie Aufgabennamen nur mit Großbuchstaben.
Verwenden Sie Anführungszeichen, wenn Sie Aufgaben benennen und aufrufen.
Bei Aufgabennamen, die mit Kleinbuchstaben definiert sind, rufen Sie die Aufgabe mit Großbuchstaben auf. Ein Beispiel: Eine Aufgabe, die durch „CREATE TASK task_c…“ definiert ist, kann als SELECT SYSTEM$GET_PREDECESSOR_RETURN_VALUE(‚TASK_C‘) aufgerufen werden.
Übergeben Sie Konfigurationsinformationen an den Task-Graphen¶
Sie können Konfigurationsinformationen übergeben, indem Sie ein JSON-Objekt verwenden, das von anderen Aufgaben in einem Task-Graphen gelesen werden kann. Verwenden Sie die Syntax CREATE TASK oder ALTER TASK mit dem Parameter CONFIG, um die Konfigurationsinformationen in der Stammaufgabe festzulegen, zu löschen oder zu ändern. Verwenden Sie die Funktion SYSTEM$GET_TASK_GRAPH_CONFIG, um die Konfigurationsinformationen abzurufen.
Beispiel:
Bemerkung
Sie können die Konfiguration für eine einzelne Aufgabenausführung mit dem Befehl EXECUTE TASK … USING CONFIG dynamisch überschreiben. Mit diesem Befehl können Sie verschiedene Konfigurationen testen oder Ad-hoc-Ausführungen mit geänderten Einstellungen ausführen, ohne die Aufgabendefinition zu ändern.
Rückgabewerte zwischen Aufgaben weitergeben¶
Sie können Rückgabewerte zwischen Aufgaben in einem Task-Graphen übergeben Verwenden Sie die Funktion SYSTEM$SET_RETURN_VALUE, um einen Rückgabewert von einer Aufgabe hinzuzufügen, und verwenden Sie die Funktion SYSTEM$GET_PREDECESSOR_RETURN_VALUE, um ihn abzurufen.
Wenn eine Aufgabe mehrere Vorgänger hat, müssen Sie angeben, welche Aufgabe den von Ihnen gewünschten Rückgabewert hat. Im folgenden Beispiel erstellen wir eine Stammaufgabe in einem Task-Graphen, die Konfigurationsinformationen hinzufügt.
Laufzeitinformationen abrufen und verwenden¶
Verwenden Sie die Funktion SYSTEM$TASK_RUNTIME_INFO, um Informationen über den aktuellen Aufgabenlauf zu melden. Diese Funktion verfügt über mehrere Optionen, die speziell für Task-Graphen gelten. Verwenden Sie zum Beispiel CURRENT_ROOT_TASK_NAME, um den Namen der Stammaufgabe im aktuellen Task-Graphen zu ermitteln. Die folgenden Beispiele zeigen, wie Sie einer Tabelle einen Datumsstempel hinzufügen, der darauf basiert, wann die Stammaufgabe des Task-Graphen gestartet wurde.
Beispiele¶
Beispiel: Mehrere Aufgaben starten und Status melden¶
Im folgenden Beispiel startet die Stammaufgabe Aufgaben zur Aktualisierung von drei verschiedenen Tabellen. Nachdem diese drei Tabellen aktualisiert wurden, kombiniert eine Aufgabe die Informationen aus den anderen drei Tabellen zu einer aggregierten Verkaufstabelle.
Beispiel für eine Finalizer-Aufgabe: E-Mail-Benachrichtigung senden¶
Dieses Beispiel zeigt, wie Sie eine Finalizer-Aufgabe verwenden, um eine E-Mail-Zusammenfassung einer Task-Graph-Ausführung zu versenden. Die Finalizer-Aufgabe ruft zwei externe Funktionen auf: Eine aggregiert den Abschlussstatus jeder Aufgabe, während die andere die Informationen in eine E-Mail für einen externen Messagingdienst formatiert.
Dieses Beispiel verwendet eine Beispiel-Stammaufgabe namens task_root und ein Beispiel für eine Finalizer-Aufgabe mit dem Namen notify_finalizer.
Beispiel für eine Finalizer-Aufgabe: Fehler korrigieren¶
Dieses Beispiel zeigt, wie eine Finalisierungsaufgabe Fehler korrigieren kann.
Zu Demonstrationszwecken sind die Aufgaben so konzipiert, dass sie bei ihrem ersten Durchlauf fehlschlagen. Die Finalisierungsaufgaben korrigieren das Problem und starten die Aufgaben neu, die bei den folgenden Durchläufen erfolgreich sind: