Kategorien:

Datenpipeline DDL

ALTER TASK

Ändert die Eigenschaften für eine bestehende Aufgabe.

Siehe auch:

CREATE TASK, DROP TASK, SHOW TASKS

Unter diesem Thema:

Syntax

ALTER TASK [ IF EXISTS ] <name> RESUME | SUSPEND

ALTER TASK [ IF EXISTS ] <name> REMOVE AFTER <string> | ADD AFTER <string>

ALTER TASK [ IF EXISTS ] <name> SET { [ WAREHOUSE = <string> ] [ SCHEDULE = '{ <number> MINUTE | USING CRON <expr> <time_zone> }' ] }

ALTER TASK [ IF EXISTS ] <name> SET { [ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ] }

ALTER TASK [ IF EXISTS ] <name> UNSET { <property_name> | <session_parameter> } [ , ... ]

ALTER TASK [ IF EXISTS ] <name> MODIFY AS <sql>

ALTER TASK [ IF EXISTS ] <name> MODIFY WHEN <boolean_expr>

Parameter

Name

Bezeichner für die zu ändernde Aufgabe. Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.

RESUME | SUSPEND

Gibt die Aktion an, die für die Aufgabe ausgeführt werden soll:

  • RESUME bringt eine angehaltene Aufgabe in einen benutzbaren „Gestartet“-Status. Beachten Sie, dass Konten derzeit auf maximal 10.000 fortgesetzte Aufgaben (d. h. im Status „Gestartet“) beschränkt sind.

  • SUSPEND versetzt die Aufgabe in einen „Angehalten“-Status.

Wenn der Aufgabenzeitplan auf ein Intervall (d. h. Zahl MINUTE) festgelegt ist, wird die Basisintervallzeit des Zeitplans zum Zeitpunkt der Wiederaufnahme der Aufgabe auf die aktuelle Zeit zurückgesetzt, um Mehrdeutigkeiten zu vermeiden.

Die Basisintervallzeit startet den Intervallzähler ab der aktuellen Uhrzeit. Wenn beispielsweise ein INTERVAL-Wert von 10 festgelegt ist und die Aufgabe um 9:03 Uhr aktiviert wird, wird die Aufgabe um 9:13 Uhr, 9:23 Uhr usw. ausgeführt. Beachten Sie, dass wir uns nach besten Kräften bemühen, absolute Präzision sicherzustellen, aber nur garantieren, dass Aufgaben nicht vor ihrem festgelegten Intervall ausgeführt werden (im aktuellen Beispiel könnte es sein, dass die Aufgabe erst 9:14 Uhr ausgeführt wird, aber definitiv nicht 9:12 Uhr).

REMOVE AFTER Zeichenfolge

Gibt den Namen der aktuellen Vorgängeraufgabe für diese untergeordnete Aufgabe an. Verwenden Sie diesen Parameter, um die aktuelle Vorgängeraufgabe aus der angegebenen Aufgabe zu entfernen, bevor Sie mit ALTER TASK … ADD AFTER eine Vorgängeraufgabe hinzufügen. Die untergeordnete Aufgabe wird automatisch angehalten.

In einem einfachen Aufgabenstrukturbaum wird eine untergeordnete Aufgabe ausgelöst, wenn die Vorgängeraufgabe ausgeführt und erfolgreich abgeschlossen wurde. Weitere Informationen dazu finden Sie in der Beschreibung des Parameters AFTER unter CREATE TASK.

Wenn der Vorgänger einer untergeordneten Aufgabe entfernt wird, wird die frühere untergeordnete Aufgabe entweder zu einer eigenständigen Aufgabe oder zu einer Stammaufgabe, je nachdem, ob andere Aufgaben diese frühere untergeordnete Aufgabe als ihren Vorgänger identifizieren. Diese Aufgabe ist standardmäßig angehalten und muss manuell fortgesetzt werden.

ADD AFTER Zeichenfolge

Gibt den Namen einer neuen Vorgängeraufgabe für diese untergeordnete Aufgabe an. Verwenden Sie diesen Parameter, um der angegebenen Aufgabe eine Vorgängeraufgabe hinzuzufügen, nachdem die aktuelle Vorgängeraufgabe mit ALTER TASK … REMOVE AFTER entfernt wurde.

SET ...

Gibt eine oder beide der folgenden Angaben an:

  • Eine (oder mehrere) Eigenschaften, die für die Aufgabe festgelegt werden sollen (getrennt durch Leerzeichen, Kommas oder neue Zeilen). Weitere Informationen zu den Eigenschaften, die Sie festlegen können, finden Sie unter CREATE TASK.

  • Eine durch Kommas getrennte Liste von Sitzungsparametern, die für die Sitzung festgelegt werden sollen, wenn die Aufgabe ausgeführt wird. Eine Aufgabe unterstützt alle Sitzungsparameter. Die vollständige Liste finden Sie unter Parameter.

UNSET ...

Gibt eine (oder mehrere) Eigenschaften und/oder Sitzungsparameter an, die für die Aufgabe aufgehoben werden sollen, wodurch sie auf die Standardwerte zurückgesetzt werden.

Sie können mehrere Eigenschaften/Parameter mit einer einzigen ALTER-Anweisung zurücksetzen. Dabei müssen die einzelne Eigenschaften/Parameter aber durch ein Komma getrennt werden. Wenn Sie eine Eigenschaft oder einen Parameter zurücksetzen, geben Sie nur den Namen an. Die Angabe eines Wertes für die Eigenschaft oder den Parameter gibt einen Fehler zurück.

SQL

Gibt die einzelne SQL-Anweisung an oder den Aufruf einer gespeicherten Prozedur, die im Rahmen einer Aufgabenbearbeitung ausgeführt wird.

Bemerkung

Überprüfen Sie, ob die SQL-Anweisung oder die gespeicherte Prozedur, auf die Sie in einer Aufgabe verweisen, wie erwartet ausgeführt wird, bevor Sie die Aufgabe erstellen. Aufgaben dienen der Automatisierung von SQL-Anweisungen und gespeicherten Prozeduren, die bereits gründlich getestet wurden.

WHEN Boolescher_Ausdruck

Gibt einen booleschen SQL-Ausdruck an. Wenn eine Aufgabe ausgelöst wird (basierend auf ihrer SCHEDULE- oder AFTER-Einstellung), prüft sie die Bedingungen des Ausdrucks, um zu bestimmen, ob sie ausgeführt werden soll. Wenn die Bedingungen des Ausdrucks nicht erfüllt sind, überspringt die Aufgabe die aktuelle Ausführung. Alle Aufgaben, die diese Aufgabe als Vorgänger identifizieren, werden ebenfalls nicht ausgeführt.

Das Überprüfen der Bedingungen des WHEN-Ausdrucks erfordert kein virtuelles Warehouse, verwendet jedoch einen geringen Verarbeitungsaufwand in der Clouddienstschicht. Eine nominale Gebühr fällt jedes Mal an, wenn eine Aufgabe ihre WHEN-Bedingung auswertet und nicht ausgeführt wird. Die Gebühren fallen jedes Mal an, sobald die Aufgabe ausgelöst wird, bis sie ausgeführt wird. Zu diesem Zeitpunkt wird die Gebühr in Snowflake-Credits umgewandelt und der Computeressourcennutzung für die Ausführung der Aufgabe hinzugefügt.

Derzeit wird die folgende Funktion für die Auswertung im SQL-Ausdruck unterstützt:

SYSTEM$STREAM_HAS_DATA

Gibt an, ob ein angegebener Stream Änderungsnachverfolgungsdaten enthält. Wird verwendet, um den aktuellen Aufgabenlauf zu überspringen, wenn der Stream keine Änderungsdaten enthält.

Wenn das Ergebnis FALSE ist, wird die Aufgabe nicht ausgeführt.

Nutzungshinweise

  • Das Fortsetzen oder Anhalten einer Aufgabe (mit ALTER TASK … RESUME oder ALTER TASK …SUSPEND) erfordert entweder die Berechtigung OWNERSHIP oder OPERATE für diese Aufgabe.

    Wenn eine Aufgabe fortgesetzt wird, überprüft Snowflake, ob die Rolle mit der Berechtigung OWNERSHIP für die Aufgabe auch die Berechtigung USAGE für das der Aufgabe zugewiesene Warehouse sowie die globale Berechtigung EXECUTE TASK hat. Wenn nicht, wird ein Fehler erzeugt.

    Nur Kontoadministratoren (d. h. Benutzer mit der Rolle ACCOUNTADMIN) können einer Rolle die Berechtigung EXECUTE TASK erteilen. Zur Vereinfachung der Verwendung empfehlen wir das Erstellen einer benutzerdefinierten Rolle (z. B. TASKADMIN) und das Zuweisen der Berechtigung EXECUTE TASK an diese Rolle. Jede Rolle, die Berechtigungen erteilen kann (z. B. SECURITYADMIN oder jede Rolle mit der Berechtigung MANAGE GRANTS) kann diese benutzerdefinierte Rolle dann jeder Aufgabeneigentümerrolle zuweisen, um eine Änderung ihrer eigenen Aufgaben zu ermöglichen. Anweisungen zum Erstellen von benutzerdefinierten Rollen und Rollenhierarchien finden Sie unter Konfigurieren der Zugriffssteuerung.

  • Nur der Aufgabeneigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für die Aufgabe) kann Eigenschaften für diese Aufgabe festlegen.

  • Eine eigenständige Aufgabe muss angehalten werden, bevor sie geändert werden kann.

  • Die Stammaufgabe in einem Aufgabenstrukturbaum muss angehalten werden, bevor eine Aufgabe im Strukturbaum geändert, eine untergeordnete Aufgabe angehalten oder fortgesetzt oder eine untergeordnete Aufgabe hinzugefügt wird (mit ALTER TASK … AFTER).

  • Ein einfacher Aufgabenstrukturbaum ist auf maximal 1.000 Aufgaben insgesamt (einschließlich der Stammaufgabe) beschränkt, die entweder den Status „Angehalten“ oder „Fortgesetzt“ haben.

  • Um alle abhängigen Aufgaben, die in einem einfachen Aufgabenstrukturbaum an eine Stammaufgabe gebunden sind, rekursiv fortzusetzen, fragen Sie die Funktion SYSTEM$TASK_DEPENDENTS_ENABLE ab, anstatt jede Aufgabe einzeln zu aktivieren (mit ALTER TASK … RESUME).

  • Standardmäßig wird eine DML-Anweisung, die ohne explizites Starten einer Transaktion ausgeführt wird, bei Erfolg automatisch committet oder bei einem Fehler am Ende der Anweisung zurückgesetzt. Dieses Verhalten wird Autocommit genannt und mit dem Parameter AUTOCOMMIT gesteuert. Dieser Parameter muss auf TRUE gesetzt sein. Wenn der Parameter AUTOCOMMIT auf Kontoebene auf FALSE festgelegt ist, legen Sie den Parameter für die individuelle Aufgabe auf TRUE fest (mit ALTER TASK … SET AUTOCOMMIT = TRUE).

  • Wenn eine Aufgabe gelöscht wird, wird jede aktuelle Ausführung der Task (d. h. ein Ausführung mit dem Status EXECUTING in der TASK_HISTORY-Ausgabe) abgeschlossen. Führen Sie die Funktion SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS aus, um die Ausführung der angegebenen Aufgabe abzubrechen.

Beispiele

Das folgende Beispiel leitet die Operation einer Aufgabe ein:

ALTER TASK mytask RESUME;

Im folgenden Beispiel werden die Sitzungsparameter TIMEZONE und CLIENT_TIMESTAMP_TYPE_MAPPING für die Sitzung festgelegt, in der die Aufgabe ausgeführt wird:

ALTER TASK mytask SET TIMEZONE = 'America/Los_Angeles', CLIENT_TIMESTAMP_TYPE_MAPPING = TIMESTAMP_LTZ;

Das folgende Beispiel legt einen anderen Zeitplan für eine Aufgabe fest:

ALTER TASK mytask SET SCHEDULE = 'USING CRON */3 * * * * UTC';

Im folgenden Beispiel wird die aktuelle Vorgängeraufgabe für die untergeordnete Aufgabe mytask (pred_task1) entfernt und durch eine andere Vorgängeraufgabe (pred_task2) ersetzt:

ALTER TASK mytask REMOVE AFTER pred_task1;

ALTER TASK mytask ADD AFTER pred_task2;

Im folgenden Beispiel wird die einer Aufgabe zugeordnete SQL-Anweisung geändert. Die Ausgabe fragt jetzt die CURRENT_VERSION-Funktion ab, wenn sie ausgeführt wird:

ALTER TASK mytask MODIFY AS SELECT CURRENT_VERSION();

Im folgenden Beispiel wird die einer Aufgabe zugeordnete WHEN-Bedingung geändert. Bei Auslösung der Aufgabe (nach einem Zeitplan oder nachdem die übergeordnete Aufgabe erfolgreich ausgeführt wurde) erfolgt die Ausführung nur dann, wenn der mystream-Stream Daten enthält:

ALTER TASK mytask MODIFY WHEN SYSTEM$STREAM_HAS_DATA('MYSTREAM');