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:
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> ]
[ COMMENT = '<string_literal>' ]
[ FINALIZE = <string> ]
[ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ AFTER <string> [ , <string> , ... ] ]
[ WHEN <boolean_expr> ]
AS
<sql>
Syntaxvariante¶
CREATE TASK … CLONE
Erstellt eine neue Aufgabe mit denselben Parameterwerten:
CREATE [ OR REPLACE ] TASK <name> CLONE <source_task> [ ... ]
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 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, wie 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 Konsole 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 serverlose Computeressourcen für die Ausführung dieser Aufgabe zu verwenden. Snowflake passt die Größe und Skalierung der serverlosen Computeressourcen automatisch an den jeweiligen Workload an. 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, wie z. B.
SMALL
,MEDIUM
oderLARGE
. Die größte von diesem Parameter unterstützte Größe istXXLARGE
. 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 Task-Graphen 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 Task-Graphen 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) # | | | | | # | | | | | * * * * *
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 Ausführungszeit wird jedoch übersprungen, wenn eine vorherige Ausführungszeit nicht vor dem Start der nächsten gültigen Ausführungszeit 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:
Wenn die Aufgabe fortgesetzt wird (mit ALTER TASK … RESUME) oder
Wenn ein anderes Intervall eingerichtet wird (mit ALTER TASK … SET SCHEDULE)
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 um absolute Präzision bemühen, aber nur garantieren, dass Aufgaben nicht vor dem für sie festgelegten Intervall ausgeführt werden. Im aktuellen Beispiel könnte es sein, dass die Aufgabe erstmals 9:14 Uhr ausgeführt wird, aber sie wird keinesfalls 9:12 Uhr ausgeführt.Bemerkung
Der maximal unterstützte Wert ist
11520
(8 Tage). Aufgaben, die einen größeren Wert alsnum MINUTE
haben, werden nie ausgeführt.
CONFIG = configuration_string
Gibt eine Zeichenfolgen-Darstellung von Schlüssel-Wert-Paaren an, auf die alle Aufgaben im Task-Graphen 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 Task-Graphen.
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 Task-Graphen 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 Task-Graphen.
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 gilt nicht für 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 Task-Graphen gestartet.FALSE
stellt sicher, dass jeweils nur eine Instanz eines bestimmten Task-Graphen ausgeführt werden darf. Die nächste Ausführung einer Stammaufgabe wird erst geplant, wenn die Ausführung aller untergeordneten 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.
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:
0
–86400000
(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 Task-Graphen fest. Wenn der Parameter auf einen Wert größer als
0
gesetzt wird, gilt für Ausführungen der eigenständigen Aufgabe bzw. des Task-Graphen das folgende Verhalten:Eigenständige Aufgaben werden automatisch angehalten, wenn die angegebene Anzahl aufeinanderfolgender Aufgabenausführungen entweder fehlschlägt oder eine Zeitüberschreitung verursacht.
Eine Stammaufgabe wird automatisch angehalten, wenn die Ausführung einer beliebigen Einzelaufgabe im Task-Graphen fehlgeschlagen ist oder wenn die angegebene Anzahl von aufeinanderfolgenden Ausführungen überschritten ist.
Wenn der Parameter auf
0
gesetzt ist, werden fehlgeschlagene Aufgaben nicht automatisch angehalten.Die Einstellung gilt für Aufgaben, die entweder auf serverlose Computeressourcen oder auf Computeressourcen eines virtuellen Warehouses angewiesen sind.
Weitere Informationen zu diesem Parameter finden Sie unter SUSPEND_TASK_AFTER_NUM_FAILURES.
Werte:
0
– Keine Obergrenze.Standard:
10
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.
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 Task-Graphen erstellen oder diese Aufgabe zu einem bestehenden Task-Graphen hinzufügen. Ein Task-Graph 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 Task-Graphen erst definiert werden kann, nachdem alle seine Teilaufgaben erstellt wurden. Führen Sie ALTER TASK … ADD AFTER-Anweisungen aus, um die Vorgänger jeder Aufgabe im geplanten Task-Graphen 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, 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 Task-Graph 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 Task-Graphen müssen denselben Aufgabeneigentümer haben. Eine einzelne Rolle muss über die Berechtigung OWNERSHIP für alle Aufgaben im Task-Graphen verfügen.
Alle Aufgaben eines Task-Graphen müssen sich in demselben Schema befinden.
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 beliebige Aufgabe im Task-Graphen 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
- oderAFTER
-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 die Rückgabe eines FALSE-Wertes zu verhindern, obwohl der Stream Änderungsdaten enthält. Es kann jedoch nicht garantiert werden, dass die Rückgabe von TRUE-Werten verhindert wird, wenn der Stream gar 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 Task-Graphen 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
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
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 Aufgabenzeitpläne, die nicht auf Aufgabenausführungen abgestimmt sind. 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 Task-Graphen 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
TASK_AUTO_RETRY_ATTEMPTS = num
Gibt die Anzahl der automatischen Wiederholungsversuche für den Task-Graphen an. Wenn ein Task-Graph mit Status FAILED abgeschlossen wird, kann Snowflake die Ausführung des Task-Graphen automatisch ab der letzten fehlgeschlagenen Aufgabe im Task-Graphen erneut versuchen.
Die automatische Wiederholung des Task-Graphen ist standardmäßig deaktiviert. Um diese Features zu aktivieren, setzen Sie TASK_AUTO_RETRY_ATTEMPTS in der Stammaufgabe des Task-Graphen auf einen Wert größer als
0
.Beachten Sie, dass dieser Parameter bei der Stammaufgabe des Task-Graphen festgelegt werden muss. Wenn die Einstellung bei einer untergeordneten Aufgabe erfolgt, wird ein Fehler zurückgegeben.
Werte:
0
–30
Standard:
0
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 bei Aufgaben erforderlich, bei deren Ausführung serverlose Computeressourcen benötigt werden. |
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 des Aufgabeneigentümers ausgeführt. 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 sind serverlos oder ein vom Benutzer angegebenes virtuelles Warehouse. Um serverlose Aufgaben zu verwenden, lassen Sie den Parameter
WAREHOUSE = string
in der CREATE TASK-Anweisung weg.Serverlose Computeressourcen für eine Aufgabe können in Warehouse-Größen von
XSMALL
bisXXLARGE
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 Task-Graphen aktiviert werden. Für die Ausführung einzelner Aufgaben eines Task-Graphen kann entweder mit serverlosen oder mit benutzerverwalteten Computeressourcen erfolgen. Eine Aktivierung dieses serverlosen Computemodells für alle Aufgaben im Task-Graphen 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 Aufgabe (d. h. ein Ausführung mit 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.
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;
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;
Zusätzliche Zeitbeispiele:
SCHEDULE-Wert |
Beschreibung |
---|---|
|
Jede Minute. UTC-Zeitzone. |
|
Jede Nacht um 2:00 Uhr. UTC-Zeitzone. |
|
Zweimal täglich um 5:00 Uhr und um 17:00 Uhr (jeweils zur vollen Stunde). UTC-Zeitzone. |
|
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);
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);
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';
Erstellen Sie eine serverlose untergeordnete Aufgabe in einem Task-Graphen, 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 Task-Graphen ist task1
, und task2
, task3
und task4
sind untergeordnete Aufgaben von task1
. Im folgenden Beispiel wird die untergeordnete Aufgabe task5
zum Task-Graphen hinzugefügt, wobei task2
, task3
und task4
als Vorgängeraufgaben angegeben werden:
-- 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);
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();
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=";"
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;
$$;
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;
Finalizer-Aufgabe¶
Erstellen Sie eine Finalizer-Aufgabe, die mit der Stammaufgabe eines Task-Graphen verknüpft ist und die nach Abschluss der Aufgabe eine E-Mail-Benachrichtigung sendet. Weitere Informationen zu Finalizer-Aufgaben finden Sie unter Finalizer-Aufgabe.
CREATE TASK finalize_task
WAREHOUSE = my_warehouse
FINALIZE = my_root_task
AS
CALL SYSTEM$SEND_EMAIL(
'my_email_int',
'first.last@example.com, first2.last2@example.com',
'Email Alert: Task A has finished.',
'Task A has successfully finished.\nStart Time: 10:10:32\nEnd Time: 12:15:45\nTotal Records Processed: 115678'
);