CREATE TASK

Erstellt eine neue Aufgabe im aktuellen/angegebenen Schema oder ersetzt eine bestehende Aufgabe.

Dieser Befehl unterstützt auch die folgende Variante:

  • CREATETASK … CLONE (erstellt einen Klon einer bestehenden Aufgabe)

Siehe auch:

ALTER TASK, DROP TASK, SHOW TASKS, DESCRIBE TASK

Wichtig

Neu erstellte oder geklonte Aufgaben werden mit Status „Angehalten“ erstellt. Weitere Informationen zum Fortsetzen angehaltener Aufgaben finden Sie unter ALTER TASK … RESUME.

Syntax

CREATE [ OR REPLACE ] TASK [ IF NOT EXISTS ] <name>
  [ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
  [ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
  [ CONFIG = <configuration_string> ]
  [ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
  [ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
  [ USER_TASK_TIMEOUT_MS = <num> ]
  [ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
  [ ERROR_INTEGRATION = <integration_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ AFTER <string> [ , <string> , ... ] ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ FINALIZE = <string> ]
[ WHEN <boolean_expr> ]
AS
  <sql>
Copy

Syntaxvariante

CREATE TASK … CLONE

Erstellt eine neue Aufgabe mit denselben Parameterwerten:

CREATE [ OR REPLACE ] TASK <name> CLONE <source_task>
  [ COPY GRANTS ]
  [ ... ]
Copy

Weitere Details dazu finden Sie unter CREATE <Objekt> … CLONE.

Bemerkung

Beim Klonen von Aufgaben mit CREATE TASK <Name> CLONE oder beim Klonen eines Schemas, das Aufgaben enthält, werden alle zugrunde liegenden Aufgabeneigenschaften kopiert, sofern diese nicht explizit überschrieben werden.

Erforderliche Parameter

name

Zeichenfolge, die den Bezeichner (d. h. den Namen) für die Aufgabe angibt. Der Wert muss für das Schema, in dem die Aufgabe erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

sql

Eine der folgenden Optionen:

  • Eine einzelne SQL-Anweisung

  • Aufruf einer gespeicherten Prozedur

  • Prozedurale Logik mit Snowflake Scripting

    Beachten Sie, dass Snowsight und die klassische Weboberfläche derzeit das Erstellen oder Ändern von Aufgaben zur Verwendung von Snowflake Scripting nicht unterstützen. Verwenden Sie stattdessen SnowSQL oder einen anderen Befehlszeilenclient.

Der SQL-Code wird ausgeführt, wenn die Aufgabe gestartet wird.

Bemerkung

  • Der SQL-Code muss selbständig ausführbar sein. Wir empfehlen dringend, dass Sie erst überprüfen, ob sql 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.

  • Folgende Objekttypen können von serverlosen Aufgaben nicht aufgerufen werden:

    • UDFs (benutzerdefinierte Funktionen), die Java- oder Python-Code enthalten.

    • Gespeicherte Prozeduren, die in Scala geschrieben sind (unter Verwendung von Snowpark) oder die UDFs aufrufen, die Java- oder Python-Code enthalten.

Optionale Parameter

WAREHOUSE = string oder . USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string

WAREHOUSE = string

Gibt das virtuelle Warehouse an, das Computeressourcen für Aufgabenausführungen bereitstellt.

Lassen Sie diesen Parameter weg, um Snowflake-verwaltete Computeressourcen für die Ausführung dieser Aufgabe zu verwenden. Diese Ressourcen, die auch als serverlose Aufgaben bezeichnet werden, werden von Snowflake je nach Workload automatisch in der Größe angepasst und skaliert. Wenn ein Zeitplan für eine Aufgabe angegeben wird, passt Snowflake die Ressourcengröße an, um zukünftige Ausführungen der Aufgabe innerhalb des angegebenen Zeitrahmens abzuschließen. Um die anfängliche Warehouse-Größe für die Aufgabe anzugeben, legen Sie den Parameter USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string fest.

USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string

Wird nur auf serverlose Aufgaben angewendet.

Gibt die Größe der Computeressourcen an, die für die erstmalige Ausführung der Aufgabe bereitgestellt werden sollen, bevor ein Aufgabenverlauf für Snowflake verfügbar ist, um eine ideale Größe zu ermitteln. Sobald eine Aufgabe mehrmals erfolgreich ausgeführt wurde, ignoriert Snowflake diese Parametereinstellung.

Wenn der Aufgabenverlauf für eine bestimmte Aufgabe nicht verfügbar ist, kehren die Computeressourcen zu dieser ursprünglichen Größe zurück.

Bemerkung

Wenn in WAREHOUSE = string ein Zeichenfolgen-Parameterwert angegeben ist, führt das Festlegen dieses Parameters zu einem Benutzerfehler.

Die Größe entspricht den Computeressourcen, die beim Erstellen eines Warehouses (mit CREATE WAREHOUSE) verfügbar sind: SMALL, MEDIUM, LARGE usw. Die größte von diesem Parameter unterstützte Größe ist XXLARGE. Wenn der Parameter weggelassen wird, werden die ersten Ausführungen der Aufgabe mit einem mittelgroßen (MEDIUM) Warehouse ausgeführt.

Sie können die Anfangsgröße ändern (mit ALTER TASK), nachdem die Aufgabe erstellt und bevor sie einmal erfolgreich ausgeführt wurde. Eine Änderung des Parameters nach Start der ersten Ausführung dieser Aufgabe hat keine Auswirkungen auf die Computeressourcen für aktuelle oder zukünftige Aufgabenausführungen.

Beachten Sie, dass das Anhalten und Fortsetzen einer Aufgabe nicht den Aufgabenverlauf entfernt, der zur Größenbestimmung der benötigten Computeressourcen verwendet wurde. Der Aufgabenverlauf wird nur entfernt, wenn die Aufgabe neu erstellt wird (mit der Syntax CREATE OR REPLACE TASK).

Weitere Informationen zu diesem Parameter finden Sie unter USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE.

SCHEDULE ...

Gibt den Zeitplan für die regelmäßige Ausführung der Aufgabe an:

Bemerkung

  • Ein Zeitplan muss für eine eigenständige Aufgabe oder die Stammaufgabe in einem DAG von Aufgaben definiert werden. Andernfalls wird die Aufgabe nur ausgeführt, wenn sie manuell mit EXECUTE TASK gestartet wird.

  • Ein Zeitplan kann nicht für untergeordnete Aufgaben in einem DAG angegeben werden.

  • USING CRON expr time_zone

    Gibt einen Cron-Ausdruck und eine Zeitzone für die regelmäßige Ausführung der Aufgabe an. Unterstützt eine Teilmenge der Standardsyntax des Cron-Dienstprogramms.

    Eine Liste der Zeitzonen finden Sie unter List of tz database time zones (Liste der Zeitzonen aus der IANA-Zeitzonen-Datenbank) (Wikipedia).

    Der Cron-Ausdruck besteht aus folgenden Feldern:

    # __________ minute (0-59)
    # | ________ hour (0-23)
    # | | ______ day of month (1-31, or L)
    # | | | ____ month (1-12, JAN-DEC)
    # | | | | _ day of week (0-6, SUN-SAT, or L)
    # | | | | |
    # | | | | |
      * * * * *
    
    Copy

    Folgende Sonderzeichen werden unterstützt:

    *

    Platzhalter. Gibt jedes vorkommende Feld an.

    L

    Steht für „last“ (letzte). Bei Verwendung im Feld Wochentag können Sie Konstrukte wie „den letzten Freitag“ („5L“) eines bestimmten Monats angeben. Im Feld Tag des Monats wird der letzte Tag des Monats angegeben.

    /n

    Gibt die n-te Instanz einer bestimmten Zeiteinheit an. Jeder Zeitanteil wird unabhängig berechnet. Wenn beispielsweise im Monatsfeld 4/3 angegeben ist, ist die Aufgabe für April, Juli und Oktober geplant (d. h. alle 3 Monate, beginnend mit dem 4. Monat des Jahres). In den Folgejahren wird derselbe Zeitplan beibehalten. Das heißt, die Aufgabe ist nicht für eine Ausführung im Januar (3 Monate nach der Oktober-Ausführung) geplant.

    Bemerkung

    • Der Cron-Ausdruck wird derzeit nur für die angegebene Zeitzone ausgewertet. Durch Ändern des TIMEZONE-Parameterwerts für das Konto (oder Festlegen des Werts auf Benutzer- oder Sitzungsebene) wird die Zeitzone für die Aufgabe nicht geändert.

    • Der Cron-Ausdruck definiert alle gültigen Ausführungszeiten für die Aufgabe. Snowflake versucht, eine Aufgabe basierend auf diesem Zeitplan auszuführen. Eine gültige Laufzeit wird jedoch übersprungen, wenn eine vorherige Laufzeit nicht vor dem Start der nächsten gültigen Laufzeit abgeschlossen wurde.

    • Wenn sowohl ein bestimmter Tag des Monats als auch ein bestimmter Wochentag im Cron-Ausdruck enthalten sind, wird die Aufgabe an Tagen geplant, die entweder dem Tag des Monats oder dem Wochentag entsprechen. Beispielsweise plant SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC' eine Aufgabe um 0:00 Uhr an jedem 10. bis 20. Tag des Monats und auch an jedem Dienstag oder Donnerstag außerhalb dieser Tage.

    • Der kleinste Zeitwert in Cron ist Minute. Wird eine Aufgabe innerhalb der in ihrem Cron-Ausdruck definierten Minute fortgesetzt, ist die erste geplante Ausführung der Aufgabe das nächste Auftreten der Instanz des Cron-Ausdrucks. Wenn beispielsweise eine Aufgabe, die täglich um Mitternacht (USING CRON 0 0 * * *) ausgeführt werden soll, um Mitternacht plus 5 Sekunden (00:00:05) fortgesetzt wird, ist die erste Aufgabenausführung für die folgende Mitternacht geplant.

  • num MINUTE

    Gibt ein Intervall (in Minuten) für die Wartezeit an, die zwischen Ausführungen der Aufgabe eingefügt wird. Akzeptiert nur positive ganze Zahlen.

    Unterstützt auch die Syntax num M.

    Um Mehrdeutigkeiten zu vermeiden, wird in folgenden Fällen eine Basisintervallzeit festgelegt:

    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).

    Bemerkung

    Der maximal unterstützte Wert ist 11520 (8 Tage). Aufgaben, die einen größeren Wert als num MINUTE haben, werden nie ausgeführt.

CONFIG = configuration_string

Gibt eine Zeichenfolgen-Darstellung von Schlüssel-Wert-Paaren an, auf die alle Aufgaben im DAG zugreifen können. Muss im JSON-Format vorliegen. Weitere Informationen zum Abrufen der Konfigurationszeichenfolge für die aktuell ausgeführte Aufgabe finden Sie unter SYSTEM$GET_TASK_GRAPH_CONFIG.

Bemerkung

Dieser Parameter kann nur für eine Stammaufgabe festgelegt werden. Die Einstellung gilt für alle Aufgaben im DAG.

Der Parameter kann bei eigenständigen Aufgaben eingestellt werden, hat aber keinen Einfluss auf das Verhalten der Aufgabe. Snowflake stellt sicher, dass zu einem bestimmten Zeitpunkt nur eine Instanz einer eigenständigen Aufgabe ausgeführt wird.

ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE

Gibt an, ob mehrere Instanzen des DAG gleichzeitig ausgeführt werden dürfen.

Bemerkung

Dieser Parameter kann nur für eine Stammaufgabe festgelegt werden. Die Einstellung gilt für alle Aufgaben im DAG.

Der Parameter kann bei eigenständigen Aufgaben eingestellt werden, hat aber keinen Einfluss auf das Verhalten der Aufgabe. Snowflake stellt sicher, dass zu einem bestimmten Zeitpunkt nur eine Instanz einer eigenständigen Aufgabe ausgeführt wird.

  • TRUE stellt sicher, dass zu einem bestimmten Zeitpunkt nur eine Instanz einer Stammaufgabe ausgeführt wird. Wenn eine Stammaufgabe zum Zeitpunkt der nächsten geplanten Ausführung noch immer ausgeführt wird, wird diese geplante Zeit übersprungen. Diese Garantie erstreckt sich nicht auf untergeordnete Aufgaben. Wenn die nächste geplante Ausführung der Stammaufgabe ansteht, während die aktuelle Ausführung einer untergeordneten Aufgabe noch aktiv ist, wird eine weitere Instanz des DAG gestartet.

  • FALSE stellt sicher, dass jeweils nur eine Instanz eines bestimmten DAG ausgeführt werden darf. Die nächste Ausführung einer Stammaufgabe wird erst geplant, wenn die Ausführung aller untergeordneten Aufgaben im DAG beendet wurde. Das heißt, wenn die kumulierte Zeit, die für die Ausführung aller Aufgaben im DAG benötigt wird, die in der Definition der Stammaufgabe festgelegte explizit geplante Zeit überschreitet, wird mindestens eine Ausführung des DAG übersprungen.

Standard: FALSE

session_parameter = value [ , session_parameter = value ... ]

Gibt eine durch Kommas getrennte Liste von Sitzungsparametern an, 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 Sitzungsparameter.

USER_TASK_TIMEOUT_MS = num

Gibt das Zeitlimit für die einzelne Ausführung der Aufgabe an, bevor das Zeitlimit überschritten wird (in Millisekunden).

Bemerkung

  • Bevor Sie das Zeitlimit für eine Aufgabe erheblich erhöhen, sollten Sie prüfen, ob die von der Aufgabe initiierte SQL-Anweisung optimiert werden kann (entweder durch Umschreiben der Anweisung oder mithilfe einer gespeicherten Prozedur) oder ob die Warehouse-Größe erhöht werden sollte.

  • In manchen Situationen hat der Parameter STATEMENT_TIMEOUT_IN_SECONDS Vorrang vor USER_TASK_TIMEOUT_MS. Weitere Details dazu finden Sie unter STATEMENT_TIMEOUT_IN_SECONDS.

Weitere Informationen zu diesem Parameter finden Sie unter USER_TASK_TIMEOUT_MS.

Werte: 086400000 (1 Tag)

Standard: 3600000 (1 Stunde)

SUSPEND_TASK_AFTER_NUM_FAILURES = num

Gibt die Anzahl der nacheinander fehlgeschlagenen Aufgabenausführungen an, nach denen die aktuelle Aufgabe automatisch angehalten wird. Zu den fehlgeschlagenen Aufgabenausführungen zählen solche, bei denen der SQL-Code im Textteil der Aufgabe entweder zu einem Benutzerfehler oder zu einem Timeout führt. Aufgabenausführungen, die übersprungen oder abgebrochen werden oder aufgrund eines Systemfehlers fehlschlagen, gelten als „unbestimmt“ und werden bei der Zählung der fehlgeschlagenen Aufgabenausführungen nicht berücksichtigt.

Legen Sie für den Parameter eine eigenständige Aufgabe oder die Stammaufgabe eines DAG fest. Wenn der Parameter auf einen Wert größer als 0 gesetzt wird, gilt für Ausführungen der eigenständigen Aufgabe bzw. des DAG das folgende Verhalten:

  • Eigenständige Aufgaben werden automatisch angehalten, wenn die angegebene Anzahl aufeinanderfolgender Aufgabenausführungen entweder fehlschlägt oder eine Zeitüberschreitung verursacht.

  • Die Stammaufgabe wird automatisch angehalten, wenn die Ausführung einer beliebigen Einzelaufgabe im DAG fehlgeschlagen ist oder wenn die angegebene Anzahl von aufeinanderfolgenden Ausführungen überschritten ist.

Die Einstellung gilt für Aufgaben, die entweder auf von Snowflake verwaltete Computeressourcen (d. h. ein serverloses Computemodell) oder auf vom Benutzer verwaltete Computeressourcen (d. h. ein virtuelles Warehouse) angewiesen sind.

Weitere Informationen zu diesem Parameter finden Sie unter SUSPEND_TASK_AFTER_NUM_FAILURES.

Werte: 0 – Keine Obergrenze.

Standard: 0 (kein automatisches Anhalten)

ERROR_INTEGRATION = 'integration_name'

Nur erforderlich, wenn eine Aufgabe so konfiguriert ist, dass es Fehlerbenachrichtigungen über Amazon Simple Notification Service (SNS), Microsoft Azure Event Grid oder Google Pub/Sub sendet.

Gibt den Namen der Benachrichtigungsintegration an, die für die Kommunikation mit Amazon SNS MS Azure Event Grid oder Google Pub/Sub verwendet wird. Weitere Informationen dazu finden Sie unter Aktivieren von Fehlerbenachrichtigungen für Aufgaben.

COPY GRANTS

Gibt an, dass die Zugriffsberechtigungen aus der Originalaufgabe beibehalten werden, wenn eine neue Aufgabe mit einer der folgenden CREATE TASK-Varianten erstellt wird:

  • CREATE OR REPLACE TASK

  • CREATE TASK … CLONE

Der Parameter kopiert alle Berechtigungen, mit Ausnahme von OWNERSHIP, aus der bestehenden Aufgabe in die neue Aufgabe. Standardmäßig ist die Rolle, die den Befehl CREATE TASK ausführt, Eigentümer der neuen Aufgabe.

Anmerkung:

  • Wenn die CREATE TASK-Anweisung auf mehr als eine Aufgabe verweist (z. B. create or replace task t1 clone t2;), gibt die COPY GRANTS-Klausel der zu ersetzenden Aufgabe den Vorrang.

  • Die SHOW GRANTS-Ausgabe für die Ersetzungsaufgabe listet den Berechtigten für die kopierten Berechtigungen als Rolle auf, die die CREATE TASK-Anweisung ausgeführt hat, und mit dem aktuellen Zeitstempel für die Ausführung der Anweisung.

  • Die Operation zum Kopieren von Berechtigungen erfolgt atomar im Befehl CREATE TASK (d. h. innerhalb derselben Transaktion).

Bemerkung

Dieser Parameter wird derzeit nicht unterstützt.

COMMENT = 'string_literal'

Gibt einen Kommentar für die Aufgabe an.

Standard: Kein Wert

AFTER string [ , string , ... ]

Gibt eine oder mehrere Vorgängeraufgaben für die aktuelle Aufgabe an. Mit dieser Option können Sie einen DAG von Aufgaben erstellen oder diese Aufgabe zu einem bestehenden DAG hinzufügen. Ein DAG ist eine Folge von Aufgaben, die mit einer geplanten Stammaufgabe beginnt und durch Abhängigkeiten zwischen den Aufgaben miteinander verbunden ist.

Beachten Sie, dass die Struktur eines DAG erst definiert werden kann, nachdem alle seine Komponentenaufgaben erstellt wurden. Führen Sie ALTER TASK … ADD AFTER-Anweisungen aus, um die Vorgänger jeder Aufgabe im geplanten DAG anzugeben.

Eine Aufgabe wird ausgeführt, nachdem die Ausführung aller Vorgängeraufgaben erfolgreich beendet wurde (mit einer kurzen Verzögerung).

Bemerkung

  • Die Stammaufgabe sollte einen definierten Zeitplan haben. Jede untergeordnete Aufgabe muss eine oder mehrere definierte Vorgängeraufgaben haben (d. h. Aufgaben, die mit dem Parameter AFTER angegeben werden), um die Aufgaben miteinander zu verknüpfen.

  • Eine einzelne Aufgabe ist auf 100 Vorgängeraufgaben und 100 untergeordnete Aufgaben beschränkt. Ein DAG ist auf maximal 1.000 Aufgaben insgesamt (einschließlich der Stammaufgabe) beschränkt, die entweder den Status „Angehalten“ oder „Fortgesetzt“ haben.

  • Konten sind derzeit auf maximal 30.000 fortgesetzte Aufgaben beschränkt.

  • Alle Aufgaben in einem DAG müssen denselben Aufgabeneigentümer haben (d. h. eine einzelne Rolle muss über die Berechtigung OWNERSHIP für alle Aufgaben im DAG verfügen).

  • Alle Aufgaben in einem DAG müssen im gleichen Schema vorhanden sein.

  • Die Stammaufgabe muss angehalten werden, bevor eine beliebige Aufgabe neu erstellt wird (mit CREATE OR REPLACE TASK-Syntax) oder eine untergeordnete Aufgabe hinzugefügt (mit CREATE TASK … AFTER oder ALTER TASK … ADD AFTER) oder entfernt wird (mit ALTER TASK … REMOVE AFTER).

  • Wenn eine Aufgabe in einem DAG geklont wird, wird die Rolle, die die Aufgabe klont, standardmäßig zum neuen Eigentümer.

    • Wenn der Eigentümer der ursprünglichen Aufgabe den Klon erstellt, behält der Aufgabenklon die Verknüpfung zwischen der Aufgabe und der Vorgängeraufgabe bei. Dies bedeutet, dass dieselbe Vorgängeraufgabe sowohl die ursprüngliche Aufgabe als auch den Aufgabenklon auslöst.

    • Wenn eine andere Rolle den Klon erstellt, kann der Aufgabenklon einen Zeitplan haben, aber keinen Vorgänger.

  • Aktuelle Einschränkungen:

    • Snowflake sichert zu, dass höchstens eine Instanz einer Aufgabe mit einem definierten Zeitplan zu einem bestimmten Zeitpunkt ausgeführt wird. Für Aufgaben mit einer definierten Vorgängeraufgabe können wir jedoch nicht dieselbe Zusicherung bieten.

WHEN boolean_expr

Gibt einen booleschen SQL-Ausdruck an. Es werden mehrere mit AND/OR verknüpfte Bedingungen unterstützt. 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.

In einer Aufgaben-Klausel WHEN werden Folgendes unterstützt:

  • SYSTEM$STREAM_HAS_DATA wird für die Auswertung im SQL-Ausdruck unterstützt:

    Diese Funktion gibt an, ob ein angegebener Stream Änderungsverfolgungsdaten enthält. Vor dem Start der Ausführung kann mit dieser Funktion geprüft werden, ob der angegebene Stream Änderungsdaten enthält. Wenn das Ergebnis FALSE ist, wird die Aufgabe nicht ausgeführt.

    Bemerkung

    SYSTEM$STREAM_HAS_DATA wurde entwickelt, um falsch-negative Ergebnisse zu vermeiden (d. h. die Rückgabe eines FALSE-Wertes, auch wenn der Stream Änderungsdaten enthält). Es ist jedoch nicht garantiert, dass diese Funktion falsch-positive Ergebnisse vermeidet (d. h. die Rückgabe eines TRUE-Wertes, wenn der Stream keine Änderungsdaten enthält).

  • SYSTEM$GET_PREDECESSOR_RETURN_VALUE wird für die Auswertung im SQL-Ausdruck unterstützt:

    Diese Funktion ruft den Rückgabewert für die Vorgängeraufgabe in einem DAG von Aufgaben ab. Der Rückgabewert kann als Teil eines booleschen Ausdrucks verwendet werden. Bei Verwendung von SYSTEM$GET_PREDECESSOR_RETURN_VALUE können Sie den zurückgegebenen Wert bei Bedarf in den entsprechenden numerischen, Zeichenfolge- oder booleschen Typ umwandeln.

    Einfache Beispiele:

    WHEN NOT SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::BOOLEAN
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
    
    Copy

    Bemerkung

    Die Verwendung von PARSE_JSON in TASK … WHEN-Ausdrücken wird nicht unterstützt, da sie Warehouse-basierte Computeressourcen erfordert.

  • Boolesche Operatoren wie AND, OR, NOT, und andere.

  • Wechselt zwischen numerischen, Zeichenfolge- und booleschen Typen.

  • Vergleichsoperatoren wie z. B. gleich, nicht gleich, größer als, kleiner als und andere.

Für die Validierung der Bedingungen des WHEN-Ausdrucks sind keine Computeressourcen erforderlich. Die Validierung wird stattdessen in der Clouddienste-Schicht verarbeitet. 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.

Im Allgemeinen ist die Computezeit zur Validierung der Bedingung im Vergleich zur Ausführungszeit der Aufgabe unbedeutend. Als bewährtes Verfahren sollten Sie geplante und tatsächliche Aufgabenausführungen so eng wie möglich aufeinander abstimmen. Vermeiden Sie Aufgabenplanungen, die nicht mit den tatsächlichen Aufgabenausführungen übereinstimmen. Wenn z. B. etwa alle 24 Stunden Daten mit einem Stream in eine Tabelle eingefügt werden, planen Sie keine Aufgabe, die jede Minute auf Streamingdaten prüft. Die Kosten für die Validierung des WHEN-Ausdrucks bei jeder Ausführung sind im Allgemeinen unbedeutend, aber die Kosten sind kumulativ.

Beachten Sie, dass bei einem täglichen Verbrauch von Clouddiensten, der unter der 10%-Quote der täglichen Nutzung der Computeressourcen liegt, keine Gebühren für Clouddienste anfallen.

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an.

Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann.

Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingente für Objekte und Spalten.

FINALIZE = string

Gibt den Namen einer Stammaufgabe (root task) an, mit der die Finalizer-Aufgabe verknüpft ist. Eine Finalizer-Aufgabe verarbeitet das Release und nimmt eine Bereinigung der von einem DAG verwendeten Ressourcen vor. Eine Finalizer-Aufgabe wird garantiert ausgeführt, wenn der Task-Graph ausgeführt wird. Wird jedoch ein Task-Graph übersprungen (z. B. die Stammaufgabe wird übersprungen), wird die Finalizer-Aufgabe nicht ausgeführt.

  • Eine Stammaufgabe kann nur genau eine Finalizer-Aufgabe haben. Wenn Sie für eine Stammaufgabe mehrere Finalizer-Aufgaben erstellen, schlägt die Aufgabenerstellung fehl.

  • Eine Finalizer-Aufgabe kann keine untergeordneten Aufgaben haben. Jeder Befehl, der versucht, die Finalizer-Aufgabe zu einem Vorgänger zu machen, schlägt fehl.

  • Eine Finalizer-Aufgabe kann keinen Zeitplan haben. Das Erstellen einer Finalizer-Aufgabe mit einem Zeitplan schlägt fehl.

Standard: Kein Wert

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

EXECUTE MANAGED TASK

Konto

Nur für Aufgaben erforderlich, die für die Ausführung auf Snowflake-verwaltete Computeressourcen (serverlose Aufgaben) angewiesen sind.

CREATE TASK

Schema

USAGE

Warehouse

Nur für Aufgaben erforderlich, die für die Ausführung auf benutzerverwaltete Warehouses angewiesen sind.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Aufgaben werden mit den Berechtigungen ausgeführt, die dem Aufgabeneigentümer zugeordnet sind (d. h. der Rolle mit der Berechtigung OWNERSHIP für die Aufgabe). Eine Liste der für die Ausführung von Aufgaben erforderlichen minimalen Berechtigungen finden Sie unter Aufgabensicherheit.

    Wir empfehlen, dass Sie eine SQL-Anweisung ausführen oder eine gespeicherte Prozedur aufrufen, bevor Sie sie in eine Aufgabendefinition einfügen. Führen Sie diesen Schritt in der Rolle als Aufgabeneigentümer aus, um sicherzustellen, dass die Rolle über alle erforderlichen Berechtigungen für alle Objekte verfügt, auf die vom SQL-Code verwiesen wird.

  • Die Computeressourcen für die einzelnen Ausführungen einer Aufgabe werden von Snowflake verwaltet (d. h. serverlose Aufgaben) oder von einem benutzerdefinierten virtuellen Warehouse. Um serverlose Aufgaben zu verwenden, lassen Sie den Parameter WAREHOUSE = string in der CREATE TASK-Anweisung weg.

    • Die von Snowflake verwalteten Ressourcen für eine Aufgabe können in Warehouse-Größen von XSMALL bis XXLARGE reichen. Wenn Sie größere Warehouse-Größen in diesen Bereich aufnehmen möchten, wenden Sie sich an den Snowflake-Support, um eine Größenerhöhung zu beantragen.

    • Das serverlose Modell kann für eine oder mehrere Aufgaben in einem DAG aktiviert werden. Für die Ausführung einzelner Aufgaben eines DAG kann entweder auf Snowflake- oder auf benutzerverwaltete Computeressourcen zurückgegriffen werden. Eine Aktivierung dieses serverlosen Computemodells für alle Aufgaben im DAG ist nicht erforderlich.

  • Nach dem Erstellen einer Aufgabe müssen Sie erst ALTER TASK … RESUME ausführen, bevor die Aufgabe basierend auf den in der Aufgabendefinition angegebenen Parametern ausgeführt wird. Beachten Sie, dass Konten derzeit auf maximal 30.000 fortgesetzte Aufgaben beschränkt sind.

    Wenn eine Aufgabe geklont wird, wird die Ausführung der geklonten Aufgabe standardmäßig angehalten und muss mit demselben Befehl explizit aktiviert werden.

  • Wenn eine Aufgabe mit einem unerwarteten Fehler fehlschlägt, können Sie eine Benachrichtigung über den Fehler erhalten. Weitere Informationen zum Konfigurieren von Aufgabenfehlerbenachrichtigungen finden Sie unter Aktivieren von Fehlerbenachrichtigungen für Aufgaben.

  • 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 eingestellt ist, legen Sie den Parameter für die individuelle Aufgabe auf TRUE fest (mit ALTER TASK … SET AUTOCOMMIT = TRUE). Andernfalls schlägt jede von der Aufgabe ausgeführte DML-Anweisung fehl.

  • Mehrere Aufgaben, die Änderungsdaten aus einem einzelnen Tabellenstream verwenden, rufen verschiedene Deltas ab. Wenn eine Aufgabe die Änderungsdaten in einem Stream mithilfe einer DML-Anweisung verarbeitet, erhöht der Stream den Offset. Die Änderungsdaten stehen für die nächste Aufgabe nicht mehr zur Verfügung. Derzeit wird empfohlen, dass die Änderungsdaten aus einem Stream nur durch eine einzige Aufgabe verarbeitet werden. Für dieselbe Tabelle können mehrere Streams erstellt und von verschiedenen Aufgaben verarbeitet werden.

  • Bei Verwendung der Syntax CREATE OR REPLACE wird die vorhandene Aufgabe gelöscht und unter Verwendung der angegebenen Definition neu erstellt. Beachten Sie die folgenden Verhaltensweisen:

    • Die neu erstellte Aufgabe ist standardmäßig angehalten.

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

    • Wenn die Einzelaufgabe bzw. die Stammaufgabe neu erstellt wird, wird die nächste geplante Ausführung der Aufgabe abgebrochen.

    • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

  • Hinweis zu Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

Beispiele

Eine einzelne SQL-Anweisung

Erstellen Sie eine serverlose Aufgabe, bei der der aktuelle Zeitstempel stündlich abgefragt wird, beginnend Sonntag 9:00 Uhr bis Sonntag 17:00 Uhr (Zeitzone Amerika/Los Angeles)

Die anfängliche Warehouse-Größe ist XSMALL:

CREATE TASK t1
  SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
SELECT CURRENT_TIMESTAMP;
Copy

Wie im vorherigen Beispiel, aber die Aufgabe stützt sich auf ein benutzerverwaltetes Warehouse, um die Computeressourcen für die Aufgabenausführung bereitzustellen:

CREATE TASK mytask_hour
  WAREHOUSE = mywh
  SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
AS
SELECT CURRENT_TIMESTAMP;
Copy

Zusätzliche Zeitbeispiele:

SCHEDULE-Wert

Beschreibung

* * * * * UTC

Jede Minute. UTC-Zeitzone.

0 2 * * * UTC

Jede Nacht um 2:00 Uhr. UTC-Zeitzone.

0 5,17 * * * UTC

Zweimal täglich um 5:00 Uhr und um 17:00 Uhr (jeweils zur vollen Stunde). UTC-Zeitzone.

30 2 L 6 * UTC

Im Juni, am letzten Tag des Monats, um 2:30 Uhr. UTC-Zeitzone.

Erstellen Sie eine serverlose Aufgabe, die jede Stunde den aktuellen Zeitstempel in eine Tabelle einfügt. Die Aufgabe legt den Parameter TIMESTAMP_INPUT_FORMAT für die Sitzung fest, in der die Aufgabe ausgeführt wird. Dieser Sitzungsparameter gibt das Format des eingefügten Zeitstempels an:

CREATE TASK t1
  SCHEDULE = '60 MINUTE'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy

Erstellen Sie eine Aufgabe, die alle 5 Minuten den aktuellen Zeitstempel in eine Tabelle einfügt:

CREATE TASK mytask_minute
  WAREHOUSE = mywh
  SCHEDULE = '5 MINUTE'
AS
INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy

Erstellen Sie eine Aufgabe, die alle 5 Minuten Änderungsnachverfolgungsdaten für INSERT-Operationen aus einem Stream in eine Tabelle einfügt. Die Aufgabe fragt den Stream mit der Funktion SYSTEM$STREAM_HAS_DATA ab, um festzustellen, ob Änderungsdaten vorhanden sind, und überspringt den aktuellen Lauf, wenn das Ergebnis FALSE lautet:

CREATE TASK mytask1
  WAREHOUSE = mywh
  SCHEDULE = '5 minute'
WHEN
  SYSTEM$STREAM_HAS_DATA('MYSTREAM')
AS
  INSERT INTO mytable1(id,name) SELECT id, name FROM mystream WHERE METADATA$ACTION = 'INSERT';
Copy

Erstellen Sie eine serverlose untergeordnete Aufgabe in einem DAG, und fügen Sie mehrere Vorgängeraufgaben hinzu. Die untergeordnete Aufgabe wird erst ausgeführt, wenn die Ausführung aller angegebenen Vorgängeraufgaben erfolgreich abgeschlossen wurde.

Angenommen, die Stammaufgabe eines DAG ist task1, und task2, task3 und task4 sind untergeordnete Aufgaben von task1. Im folgenden Beispiel wird die untergeordnete Aufgabe task5 zum DAG hinzugefügt und gibt task2, task3 und task4 als Vorgängeraufgaben an:

-- Create task5 and specify task2, task3, task4 as predecessors tasks.
-- The new task is a serverless task that inserts the current timestamp into a table column.
CREATE TASK task5
  AFTER task2, task3, task4
AS
INSERT INTO t1(ts) VALUES(CURRENT_TIMESTAMP);
Copy

Gespeicherte Prozeduren

Erstellen Sie eine Aufgabe mit dem Namen my_copy_task, die stündlich eine gespeicherte Prozedur aufruft, um Daten aus der Tabelle mytable in den Stagingbereich mit dem Namen mystage zu entladen (mithilfe von COPY INTO <Speicherort>):

-- Create a stored procedure that unloads data from a table
-- The COPY statement in the stored procedure unloads data to files in a path identified by epoch time (using the Date.now() method)
create or replace procedure my_unload_sp()
  returns string not null
  language javascript
  as
  $$
    var my_sql_command = ""
    var my_sql_command = my_sql_command.concat("copy into @mystage","/",Date.now(),"/"," from mytable overwrite=true;");
    var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
    var result_set1 = statement1.execute();
  return my_sql_command; // Statement returned for info/debug purposes
  $$;

-- Create a task that calls the stored procedure every hour
create task my_copy_task
  warehouse = mywh
  schedule = '60 minute'
as
  call my_unload_sp();
Copy

Mehrere SQL-Anweisungen mit SnowSQL

Erstellen einer Aufgabe, die mehrere SQL-Anweisungen ausführt. In diesem Beispiel ändert die Aufgabe das TIMESTAMP_OUTPUT_FORMAT-Format für die Sitzung und fragt dann die Funktion CURRENT_TIMESTAMP ab.

Bemerkung

Der SQL-Code der Aufgabendefinition enthält mehrere Anweisungen. Zum Ausführen der CREATE TASK-Anweisung müssen Sie als Trennzeichen für SQL-Anweisungen vorübergehend ein anderes Zeichen festlegen, das kein Semikolon ist. Andernfalls liefert die CREATE TASK-Anweisung einen Benutzerfehler. Der Befehl zum Ändern des SQL-Trennzeichens in SnowSQL ist !set sql_delimiter = <Zeichen>.

!set sql_delimiter=/
CREATE OR REPLACE TASK test_logging
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  SCHEDULE = 'USING CRON  0 * * * * America/Los_Angeles'
AS
BEGIN
  ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
  SELECT CURRENT_TIMESTAMP;
END;/
!set sql_delimiter=";"
Copy

Prozedurale Logik mit Snowflake Scripting

Erstellen einer Aufgabe, die eine Variable deklariert, diese Variable verwendet und den Wert dieser Variablen alle 2 Minuten zurückgibt:

CREATE TASK t1
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  SCHEDULE = '2 minute'
  AS
  EXECUTE IMMEDIATE
  $$
  DECLARE
    radius_of_circle float;
    area_of_circle float;
  BEGIN
    radius_of_circle := 3;
    area_of_circle := pi() * radius_of_circle * radius_of_circle;
    return area_of_circle;
  END;
  $$;

Examples:
Copy

Stammaufgabe mit Konfiguration

Erstellen Sie eine Aufgabe, die die Konfiguration angibt und dann diese Konfiguration liest.

CREATE OR REPLACE TASK root_task_with_config
WAREHOUSE=mywarehouse
SCHEDULE='10 m'
CONFIG=$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$
AS
BEGIN
  LET OUTPUT_DIR STRING := SYSTEM$GET_TASK_GRAPH_CONFIG('output_directory')::string;
  LET LEARNING_RATE DECIMAL := SYSTEM$GET_TASK_GRAPH_CONFIG('learning_rate:v1')::DECIMAL;
      ...
END;
Copy