Einführung in Aufgaben¶
Verwenden Sie Aufgaben, um Geschäftsabläufe in Ihrer Datenpipeline zu automatisieren, zu planen und zu optimieren.
In Snowflake können Aufgaben eine der folgenden Arten von Funktionen ausführen:
Eine einzelne SQL-Anweisung
Ein Aufruf einer gespeicherten Prozedur.
Prozedurale Logik mit Snowflake Scripting
Für komplizierte Prozeduren, wie die Erstellung von Berichten oder die Pflege von periodischen Tabellen, kombinieren Sie Aufgaben, indem Sie Aufgabendiagramme erstellen. Um kontinuierlich neue oder geänderte Daten zu verarbeiten, sobald sie eingehen, wie in Extract, Load, Transform (ELT) Workflows, verwenden Sie getriggerte Aufgaben, um Aufgaben mit Tabellenstreams zu kombinieren.
Bemerkung
Tabellenschemaentwicklung wird von Aufgaben nicht unterstützt.
Unter diesem Thema:
Überblick über den Workflow zur Aufgabenerstellung¶
Erstellen Sie eine Aufgabenadministratorrolle, mit der die Befehle in den folgenden Schritten ausgeführt werden können.
Definieren Sie eine neue Aufgabe mit CREATE TASK. Die Aufgabe ist standardmäßig angehalten. Informationen zur Einstellung der Aufgabenparameter finden Sie unter:
Testen Sie Aufgaben manuell mit EXECUTE TASK.
Ändern Sie die Aufgabe, oder lassen Sie sie mit ALTER TASK. … RESUME kontinuierlich ausführen. Informationen zur Ausführung von Tasks finden Sie unter:
Computeressourcen¶
Die Aufgaben benötigen Computeressourcen, um SQL-, Python-, Java- und Scala-Funktionen sowie gespeicherte Prozeduren auszuführen. Für jede Aufgabe können Sie wählen, ob Sie die Ressourcen von Snowflake verwalten lassen möchten, indem Sie serverlose Aufgaben erstellen, oder ob Sie sie selbst mit dem vom Benutzer verwalteten virtuellen Warehouse-Modell verwalten möchten.
Serverlose Aufgaben¶
Bei diesem Modell werden die Aufgaben auf von Snowflake verwalteten Rechnern ausgeführt. Snowflake passt die Größe der Ressourcen automatisch an die jeweilige Arbeitslast an.
Aufgaben, die regelmäßig ausgeführt werden, sind gute Kandidaten für das serverlose Berechnungsmodell. Dieses Modell empfiehlt sich auch, wenn Sie nicht ausgelastete Warehouses haben, in denen nur wenige Aufgaben ausgeführt werden.
Snowflake bestimmt die ideale Größe der Computeressourcen für eine bestimmte Ausführung auf der Grundlage einer dynamischen Analyse der Statistiken für die letzten Ausführungen derselben Aufgabe.
Einschränkungen¶
Die maximale Berechnungsgröße für eine serverlose Aufgabe entspricht einem X2LARGE virtuellen Warehouse.
Erstellen Sie eine Aufgabe mit dem serverlosen Berechnungsmodell¶
Wenn Sie CREATE TASK oder ALTER TASK verwenden, lassen Sie den Parameter WAREHOUSE weg.
Die Rolle, die den Task ausführt, muss über die globale Berechtigung EXECUTE MANAGED TASK verfügen. Weitere Informationen zu den Anforderungen an die Zugriffssteuerung von Aufgaben finden Sie unter Aufgabensicherheit.
Sie können eine gewisse Kontrolle über die Kosten und die Leistung von serverlosen Aufgaben übernehmen, indem Sie die folgenden Parameter einstellen:
SERVERLESS_TASK_MAX_STATEMENT_SIZE: die maximale Größe des Warehouse, um unerwartete Kosten zu vermeiden.
SERVERLESS_TASK_MIN_STATEMENT_SIZE: die Mindestgröße des Warehouse für eine vorhersehbare Leistung.
TARGET_COMPLETION_INTERVAL: die gewünschte Zeit für die Fertigstellung der Aufgabe.
Wenn diese Einstellungen angegeben sind, gilt folgende Rangfolge:
SERVERLESS_TASK_MAX_STATEMENT_SIZE
SERVERLESS_TASK_MIN_STATEMENT_SIZE
TARGET_COMPLETION_INTERVAL
Wie Snowflake serverlose Computeressourcen schätzt¶
Snowflake schätzt automatisch die für eine Aufgabe benötigten Computeressourcen auf der Grundlage des Zielzeitrahmens und der Leistung früherer Aufgabenläufe.
Der Zielzeitrahmen kann mit TARGET_COMPLETION_INTERVAL festgelegt werden. Wenn dieser Wert nicht festgelegt ist, passt Snowflake die Größe der serverlosen Computeressourcen so an, dass sie vor der nächsten geplanten Ausführungszeit abgeschlossen sind.
Nachdem eine Aufgabe abgeschlossen ist, schätzt Snowflake den Bedarf an Computeressourcen wie folgt:
Wenn Aufgaben zu schnell abgeschlossen werden (innerhalb eines Zeitrahmens, der um einen Faktor kleiner ist als der Zielzeitrahmen), reduziert Snowflake die Ressourcen in den nachfolgenden Läufen um eine Warehouse-Größe.
Wenn die Aufgaben zu langsam abgeschlossen werden (innerhalb eines Zeitrahmens, der um einen Faktor größer ist als der Zielzeitrahmen), erhöht Snowflake die Ressourcen in den nachfolgenden Läufen um eine Warehouse-Größe.
Beispiele¶
Beispiel 1: Erstellen Sie eine serverlose Aufgabe, die jede Stunde mit einem Zielintervall von 120 Minuten ausgeführt wird:
CREATE TASK SCHEDULED_T1 SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE' AS SELECT 1;
Indem Sie TARGET_COMPLETION_INTERVAL mit einer relativ langen Dauer einstellen, zeigen Sie an, dass es akzeptabel ist, wenn die Ausführung der Aufgabe länger dauert. Snowflake dimensioniert serverlose Berechnungen automatisch so, dass die Aufgabenausführung innerhalb des angegebenen TARGET_COMPLETION_INTERVAL abgeschlossen wird.
Beispiel 2: Erstellen Sie eine serverlose Aufgabe, die jede Stunde mit einer Zielzeit von 10 Minuten ausgeführt wird:
CREATE TASK SCHEDULED_T2 SCHEDULE='USING CRON 0 * * * * UTC'
TARGET_COMPLETION_INTERVAL='10 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
Wenn Sie TARGET_COMPLETION_INTERVAL mit einer relativ kurzen Dauer einstellen, deutet dies darauf hin, dass Sie es vorziehen, die Aufgabe schnell zu erledigen. Snowflake dimensioniert serverlose Berechnungen automatisch so, dass die Aufgabenausführung innerhalb des angegebenen TARGET_COMPLETION_INTERVAL abgeschlossen wird, bis die SERVERLESS_TASK_MAX_STATEMENT_SIZE erreicht ist.
Beispiel 3: Erstellen Sie eine serverlose Aufgabe, die einmal pro Tag zu einem Zeitpunkt innerhalb eines Zielerfüllungsintervalls und einer Spanne von minimalen und maximalen Warehouse-Größen geplant wird:
CREATE TASK SCHEDULED_T3 SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SCHEDULING_MODE = 'FLEXIBLE'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM' SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Mit dieser Konfiguration läuft die serverlose Aufgabe einmal täglich um Mitternacht auf einem mindestens mittleren Warehouse mit einem TARGET_COMPLETION_INTERVAL von 3 Stunden. Snowflake dimensioniert serverlose Berechnungen automatisch so, dass die Aufgabenausführung innerhalb des angegebenen TARGET_COMPLETION_INTERVAL abgeschlossen wird, bis die SERVERLESS_TASK_MAX_STATEMENT_SIZE erreicht ist. Wenn Sie SCHEDULING_MODE als flexibel einstellen, können Sie die Aufgabe zu einem beliebigen Zeitpunkt des Tages beginnen.
Beispiel 4: Erstellen Sie eine serverlose Aufgabe, die einmal am Tag geplant wird, ohne ein Zielintervall für die Fertigstellung:
CREATE TASK SCHEDULED_T4 SCHEDULE='USING CRON 0 0 * * * UTC'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
Mit dieser Konfiguration wird die serverlose Aufgabe einmal täglich um Mitternacht ausgeführt. Wenn eine Reihe von Aufgabenausführungen nicht vor dem nächsten geplanten Zeitpunkt abgeschlossen ist, dimensioniert Snowflake die serverlose Berechnung automatisch so, dass die Aufgabenausführung innerhalb des angegebenen SCHEDULE abgeschlossen wird, bis die SERVERLESS_TASK_MAX_STATEMENT_SIZE erreicht ist.
Weitere Informationen zu den Parametern und der Syntax finden Sie unter CREATE TASK und ALTER TASK.
Vom Benutzer verwaltetes virtuelles Warehouse-Modell¶
Bei diesem Modell haben Sie die volle Kontrolle über die für jede Arbeitslast verwendeten Computeressourcen.
Dieses Modell wird empfohlen, wenn Sie unvorhersehbare Auslastungen von Computeressourcen manuell verwalten möchten. Warehouses mit mehreren Clustern mit automatischem Anhalten und automatischem Fortsetzen können ebenfalls dazu beitragen, Ihren Credit-Verbrauch zu reduzieren.
Auswählen einer Warehouse-Größe¶
Wenn Sie sich dafür entscheiden, bestehende Warehouses für die Bereitstellung von Computeressourcen für einzelne Aufgaben zu verwenden, sollten Sie die unter Hinweise zu Warehouses beschriebenen bewährten Verfahren befolgen. Um den Computing-Bedarf für Ihre Aufgabe zu verstehen, analysieren Sie die durchschnittliche Laufzeit für eine einzelne Aufgabe oder einen Task-Graphen unter Verwendung verschiedener Warehouses auf der Grundlage von Warehouse-Größe und Clustering. Sie sollten auch berücksichtigen, ob das Warehouse von mehreren Prozessen gemeinsam genutzt wird.
Um die durchschnittliche Laufzeit Ihrer Aufgaben zu analysieren, fragen Sie die Account Usage-Ansicht TASK_HISTORY ab. Die durchschnittliche Differenz zwischen der geplanten und der tatsächlichen Ausführungszeit einer Aufgabe ist die erwartete durchschnittliche Ausführungszeit der Aufgabe. Diese Differenz beinhaltet auch die Zeit, in der die Aufgabe in der Warteschlange stand, während andere Prozesse die Computeressourcen im Warehouse nutzen.
Bei Task-Graphen gibt es eine kurze Verzögerung zwischen dem Beenden einer Vorgängeraufgabe und dem Starten einer untergeordnete Aufgabe. Wählen Sie ein Warehouse, das groß genug ist, um mehrere untergeordnete Aufgaben gleichzeitig ausführen zu können.
Die folgende Abbildung zeigt ein Fenster von 1 Minute, in der eine einzelne Aufgabe 20 Sekunden lang in der Warteschlange steht und dann 40 Sekunden lang ausgeführt wird. Das bedeutet, dass andere Prozesse die Warehouse-Ressourcen in den ersten 20 Sekunden nach der geplanten Ausführung der Aufgabe genutzt haben.

Die folgende Abbildung zeigt einen Task-Graphen, für dessen Ausführung durchschnittlich 5 Minuten erforderlich sind. Die Abbildung zeigt das Fenster für 2 Ausführungen des zu bearbeitenden Task-Graphen. Die Berechnung dieses Fensters beginnt beim geplanten Startzeitpunkt der Stammaufgabe und endet, wenn die letzte untergeordnete Aufgabe vollständig ausgeführt wurde.
In diesem Beispiel wird das Warehouse, auf dem der Task-Graph ausgeführt wird, mit anderen gleichzeitigen Operationen geteilt. Diese parallelen Operationen verbrauchen alle verfügbaren Ressourcen, wenn die Ausführung jeder Aufgabe im Task-Graphen beendet ist und bevor die nächste Aufgabe ausgeführt wird. Infolgedessen enthält das Fenster für jede Aufgabe etwas Warteschlangenzeit für das Warten darauf, das andere Operationen abgeschlossen und die Computeressourcen freigegeben werden.

Ausführen von Aufgaben¶
In diesem Abschnitt werden die verschiedenen Möglichkeiten beschrieben, wie eine Aufgabe geplant und ausgeführt werden kann, wie mit Aufgabenfehlern umgegangen wird und wie die Version einer Aufgabe bestimmt wird.
Aufgaben nach fehlgeschlagenen Ausführungen automatisch anhalten
Fehlgeschlagene Aufgabenausführungen automatisch wiederholen
Planen einer Aufgabe¶
Aufgaben werden im Allgemeinen nach einem Zeitplan ausgeführt.
Sie können den Zeitplan beim Erstellen einer Aufgabe mit CREATE TASK oder später mit ALTER TASK festlegen. Wenn Sie Aufgaben in einem Aufgabendiagramm kombinieren, definieren Sie den Zeitplan mit den Befehlen CREATE TASK und ALTER TASK in der Stammaufgabe.
Snowflake stellt sicher, dass jeweils immer nur eine Instanz einer Aufgabe mit einem Zeitplan ausgeführt wird. Wenn eine Aufgabe zum Zeitpunkt der nächsten geplanten Ausführung noch immer ausgeführt wird, wird diese geplante Zeit übersprungen.
Snowflake passt die Größe und Skalierung der Computeressourcen für serverlose Aufgaben automatisch an. Für benutzerverwaltete Aufgaben wählen Sie eine geeignete Warehouse-Größe für die Aufgabe aus, um deren Workload innerhalb des Zeitplans zu erledigen. Weitere Informationen dazu finden Sie unter Auswählen einer Warehouse-Größe.
Aufgabenplanung und Sommerzeit¶
Der Cron-Ausdruck in einer Aufgabendefinition unterstützt die Angabe einer Zeitzone. Aufgaben, die an Tagen geplant sind, an denen der Übergang von der Standardzeit zur Sommerzeit (oder umgekehrt) erfolgt, können ein unerwartetes Verhalten aufweisen.
Beispiel:
Beim Wechsel von der Sommerzeit zur Standardzeit wird eine Aufgabe, die um 1 AM in der Zeitzone Amerika/Los Angeles (
0 1 * * * America/Los_Angeles
) beginnen soll, zweimal ausgeführt: einmal um 1 AM und noch einmal, wenn 1:59:59 AM auf 1:00:00 AM Ortszeit wechselt.Beim Wechsel von der Standardzeit zur Sommerzeit wird eine Aufgabe, die um 2 AM in der Zeitzone Amerika/Los Angeles (
0 2 * * * America/Los_Angeles
) beginnen soll, nicht ausgeführt, da die lokale Zeit von 1:59:59 AM auf 3:00:00 AM wechselt.
Um unerwartete Aufgabenausführungen aufgrund der Sommerzeit zu vermeiden, beachten Sie Folgendes:
Planen Sie keine Aufgaben, die zwischen 1 AM und 3 AM ausgeführt werden.
Passen Sie den Cron-Ausdruck für Aufgaben, die zwischen 1 AM und 3 AM geplant sind, zweimal im Jahr manuell an, um die Zeitumstellung auszugleichen.
Verwenden Sie ein Zeitformat, das keine Sommerzeit anwendet, z. B. UTC.
Getriggerte Aufgaben¶
Verwenden Sie getriggerte Aufgaben, um automatisch Aufgaben auszuführen, sobald ein definierter Stream neue Daten enthält. Damit entfällt die Notwendigkeit, eine Quelle häufig abzufragen, wenn die Verfügbarkeit neuer Daten unvorhersehbar ist. Außerdem wird die Latenzzeit verringert, da die Daten sofort verarbeitet werden.
Getriggerte Aufgaben verbrauchen erst dann Computeressourcen, wenn der definierte Datenstream Daten enthält und die Aufgabenausführung auslöst.
Im Folgenden finden Sie die Ausführungsbedingungen für getriggerte Aufgaben:
Wenn Daten in der Tabelle (oder den Tabellen) geändert werden, die der zugehörige Stream verfolgt.
Wenn die Aufgabe zum ersten Mal fortgesetzt wird, um alle Daten zu verbrauchen, die sich bereits im Stream befinden.
Getriggerte Aufgaben führen automatisch alle 12 Stunden einen Zustandscheck durch, um zu verhindern, dass der Stream veraltet. Wenn sich keine Daten im Stream befinden, überspringt Snowflake den Lauf, ohne Computeressourcen zu verwenden.
Eine getriggerte Aufgabe erstellen¶
Verwenden Sie CREATE TASK, und definieren Sie den Ziel-Stream mit der Klausel WHEN
. (Fügen Sie den Parameter SCHEDULE
nicht ein.)
Weisen Sie Computeressourcen für die Aufgabe zu, indem Sie eine der folgenden Optionen wählen:
Um die Ressourcen manuell zu verwalten (vom Benutzer verwaltete Warehouse-Aufgabe), fügen Sie den Parameter
WAREHOUSE
hinzu.Um Snowflake die Verwaltung von Ressourcen zu ermöglichen (serverlose Aufgabe), fügen Sie den Parameter
TARGET_COMPLETION_INTERVAL
hinzu. Snowflake schätzt die benötigten Ressourcen und stellt sich darauf ein, die Aufgabe in dieser Zeit zu erledigen.
Migrieren Sie eine bestehende Aufgabe von einer geplanten Aufgabe in eine getriggerte Aufgabe¶
Unterbrechen Sie die Aufgabe, deaktivieren Sie den Parameter SCHEDULE
, und nehmen Sie die Aufgabe wieder auf. Die bestehende Aufgabe muss einen in der WHEN
-Klausel definierten Zielstream haben.
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
Migrieren Sie eine bestehende, vom Benutzer verwaltete getriggerte Aufgabe in eine serverlose getriggerte Aufgabe¶
Setzen Sie die Aufgabe aus. Entfernen Sie den Parameter WAREHOUSE
, und fügen Sie den Parameter TARGET_COMPLETION_INTERVAL
hinzu. Nehmen Sie die Aufgabe wieder auf.
Hinweise zu getriggerten Aufgaben¶
In den Ausgabe von
SHOW TASKS
undDESC TASK
zeigt die EigenschaftSCHEDULE
für getriggerte Aufgaben den WertNULL
an.In der Ausgabe der „task_history“-Ansicht der Schemas „information_schema“ und „account_usage“ wird in der Spalte SCHEDULED_FROM der Wert TRIGGER angezeigt.
Wenn Sie mit mehreren Datenströmen arbeiten, können Sie den Start von Aufgaben mithilfe von bedingten Parametern steuern:
WHEN … AND
undWHEN … OR
.
Einschränkungen bei getriggerten Aufgaben¶
Standardmäßig werden getriggerte Aufgaben höchstens alle 30 Sekunden ausgeführt. Sie können den Parameter USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS so ändern, dass die Ausführung häufiger erfolgt, bis zu alle 10 Sekunden.
Streams auf Verzeichnis-Tabellen, externen Tabellen und Hybridtabellen werden nicht unterstützt.
Beispiele für getriggerte Aufgaben¶
Beispiel 1: Erstellen Sie eine vom Benutzer verwaltete Aufgabe, die immer dann ausgeführt wird, wenn sich Daten in einem der beiden Streams ändern:
CREATE TASK my_task
WHEN SYSTEM$STREAM_HAS_DATA('my_return_stream')
OR SYSTEM$STREAM_HAS_DATA('my_order_stream')
WAREHOUSE = my_warehouse
AS
INSERT INTO customer_activity
SELECT customer_id, return_total, return_date, ‘return’
FROM my_return_stream
UNION ALL
SELECT customer_id, order_total, order_date, ‘order’
FROM my_order_stream;
Beispiel 2: Erstellen Sie eine Aufgabe, die immer dann ausgeführt wird, wenn Datenänderungen in zwei verschiedenen Datenströmen festgestellt werden. Da die Aufgabe die Bedingung AND verwendet, wird die Aufgabe übersprungen, wenn nur einer der beiden Streams neue Daten enthält.
Da TARGET_COMPLETION_INTERVAL 120 Minuten beträgt, schätzt Snowflake die für die Erledigung der Aufgabe in dieser Zeit erforderlichen Computeressourcen und passt sie an.
CREATE TASK triggeredTask
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
TARGET_COMPLETION_INTERVAL='120 MINUTES'
AS
INSERT INTO completed_promotions
SELECT order_id, order_total, order_time, promotion_id
FROM orders_stream
WHERE promotion_id IS NOT NULL;
Eine Aufgabe manuell ausführen¶
Verwenden Sie CREATE TASK oder ALTER TASK, um eine neue Aufgabe zu erstellen und die Aufgabenparameter festzulegen.
Verwenden Sie EXECUTE TASK, um einen einzelnen Durchlauf der Aufgabe auszulösen. Dieser SQL-Befehl ist nützlich, um neue oder geänderte Aufgaben zu testen.
Sie können diesen SQL-Befehl direkt in Skripten oder gespeicherten Prozeduren aufrufen. Darüber hinaus unterstützt dieser Befehl die Integration von Aufgaben in externe Datenpipelines. Alle Drittanbieterdienste, die sich bei Ihrem Snowflake-Konto authentifizieren und SQL-Aktionen autorisieren können, können mit dem Befehl EXECUTE TASK Aufgaben starten.
Versionieren von Aufgabenausführungen¶
Wenn eine eigenständige Aufgabe zum ersten Mal fortgesetzt oder manuell ausgeführt wird, wird eine Startversion der Aufgabe festgelegt. Die eigenständige Aufgabe wird mit dieser Version ausgeführt. Nachdem eine Aufgabe angehalten und geändert wurde, wird beim Fortsetzen oder manuellen Ausführen der eigenständigen Aufgabe eine neue Version festgelegt.
Wenn die Aufgabe angehalten wird, werden alle zukünftigen geplanten Ausführungen der Aufgabe abgebrochen. In Ausführung befindliche Aufgaben werden jedoch weiterhin mit der aktuellen Version ausgeführt.
Angenommen, die Aufgabe wird angehalten, aber eine geplante Ausführung dieser Aufgabe hat bereits begonnen. Der Eigentümer der Aufgabe ändert den SQL-Code, der von der Aufgabe aufgerufen wird, während die Aufgabe noch ausgeführt wird. Die Aufgabe wird ausgeführt und führt den SQL-Code in ihrer Definition aus, wobei die Version der Aufgabe verwendet wird, die aktuell war, als die Ausführung der Aufgabe gestartet wurde. Wenn die Aufgabe fortgesetzt oder manuell ausgeführt wird, wird eine neue Version der Aufgabe festgelegt. Diese neue Version enthält die an der Aufgabe vorgenommenen Änderungen.
Um den Versionsverlauf der Aufgabenversionen abzurufen, fragen Sie die Account Usage-Ansicht TASK_VERSIONS (in der freigegebenen SNOWFLAKE-Datenbank) ab.
Aufgaben nach fehlgeschlagenen Ausführungen automatisch anhalten¶
Aufgaben können optional nach einer bestimmten Anzahl von aufeinanderfolgenden Ausführungen, die entweder fehlschlagen oder ein Zeitlimit überschreiten, automatisch angehalten werden. Dieses Feature sorgt für eine Senkung der Kosten, indem Aufgaben angehalten werden, die Snowflake-Credits verbrauchen, aber nicht zu Ende ausgeführt wurden.
Setzen Sie den Parameter SUSPEND_TASK_AFTER_NUM_FAILURES = num
auf eine Aufgabe. Wenn der Parameter auf einen Wert größer als 0
gesetzt wird, werden Aufgaben automatisch angehalten, falls die angegebene Anzahl aufeinanderfolgender Aufgabenausführungen entweder fehlschlägt oder eine Zeitüberschreitung verursacht.
Der Parameter kann beim Erstellen einer Aufgabe mit CREATE TASK oder später mit ALTER TASK festgelegt werden. Sie können diesen Wert auch in Snowsight ändern.
Der Parameter SUSPEND_TASK_AFTER_NUM_FAILURES kann auch auf Konto-, Datenbank- und Schemaebene festgelegt werden. Die Einstellung gilt für alle im geänderten Objekt enthaltenen Aufgaben. Beachten Sie, dass das explizite Einstellen des Parameters auf einer niedrigeren (d. h. detaillierteren) Ebene den auf einer höheren Ebene eingestellten Parameterwert überschreibt.
Fehlgeschlagene Aufgabenausführungen automatisch wiederholen¶
Wenn eine Aufgabe mit dem Status FAILED endet, kann Snowflake die Ausführung der Aufgabe automatisch erneut versuchen. Die automatische Aufgabenwiederholung ist standardmäßig deaktiviert. Um dieses Feature zu aktivieren, setzen Sie TASK_AUTO_RETRY_ATTEMPTS auf einen Wert größer als 0.
Aufgaben, die Fehlerbenachrichtigungen verwenden, senden Benachrichtigungen für jeden fehlgeschlagenen Wiederholungsversuch. Weitere Informationen dazu finden Sie unter Konfigurieren einer Aufgabe zum Senden von Fehlerbenachrichtigungen.
Wenn Sie den Parameterwert von TASK_AUTO_RETRY_ATTEMPTS auf Konto-, Datenbank- oder Schemaebene festlegen, wird die Änderung bei der nächsten geplanten Ausführung der im geänderten Objekt enthaltenen Aufgaben wirksam.
Festlegen von Sitzungsparametern für Aufgaben¶
Sie können Sitzungsparameter für die Sitzung festlegen, in der eine Aufgabe ausgeführt wird. Ändern Sie dazu eine vorhandene Aufgabe, und legen Sie die gewünschten Parameterwerte mit ALTER TASK … SET session_parameter = value[, session_parameter = value ... ]
fest bzw. bearbeiten Sie die Aufgabe in Snowsight.
Eine Aufgabe unterstützt alle Sitzungsparameter. Die vollständige Liste finden Sie unter Parameter. Aufgaben unterstützen keine Konto- oder Benutzerparameter.
Anzeigen des Aufgabenverlaufs für Ihr Konto¶
Sie können den Aufgabenverlauf für Ihr Konto mit SQL oder in Snowsight anzeigen. Weitere Informationen zum Anzeigen des Aufgabenverlaufs in Snowsight finden Sie unter Anzeigen von Aufgaben und Aufgabendiagrammen in Snowsight. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Aufgabenverlauf anzeigen.
So zeigen Sie den Ausführungsverlauf für eine einzelne Aufgabe an:
- SQL:
Fragen Sie die Tabellenfunktion TASK_HISTORY ab (im Snowflake Information Schema).
So zeigen Sie Details zu einer Task-Graph-Ausführung an, die gerade geplant ist oder ausgeführt wird:
- SQL:
Fragen Sie die Tabellenfunktion CURRENT_TASK_GRAPHS ab (im Snowflake Information Schema).
So zeigen Sie den Verlauf der Task-Graph-Ausführungen an, die in den letzten 60 Minuten erfolgreich abgeschlossen wurden, fehlgeschlagen sind oder abgebrochen wurden:
- SQL:
Fragen Sie die Tabellenfunktion COMPLETE_TASK_GRAPHS ab (im Snowflake Information Schema).
Fragen Sie die Ansicht Ansicht COMPLETE_TASK_GRAPHS ab (in Account Usage).
Kosten für Aufgaben¶
Die Kosten, die mit der Ausführung einer Aufgabe zur Ausführung von SQL-Code verbunden sind, hängen von der Quelle der Computeressourcen für die Aufgabe ab:
- Benutzerverwaltete Warehouses
Snowflake stellt Ihrem Konto die Credit-Nutzung auf der Grundlage der Warehouse-Nutzung während der Ausführung einer Aufgabe in Rechnung, ähnlich wie die Warehouse-Nutzung für die Ausführung derselben SQL-Anweisungen in einem Client oder der Snowflake-Weboberfläche. Die sekundengenaue Credit-Abrechnung und das automatische Anhalten des Warehouses sorgen für die notwendige Flexibilität, um mit größeren Warehouse-Größen zu beginnen und die Größe dann an Ihre Aufgaben-Workloads anzupassen.
- Serverloses Computemodell
Snowflake rechnet Ihr Konto auf der Grundlage der Nutzung von Computeressource ab. Die Gebühren werden auf Basis der Gesamtnutzung der Ressourcen (einschließlich der Clouddienstnutzung) berechnet und in Computestunden (Compute-Hours) der Credit-Nutzung gemessen. Die Kosten für die Computestunden (Compute-Hours) hängen von der Größe des Warehouses und der Laufzeit der Abfrage ab. Weitere Informationen dazu finden Sie unter Serverlose Credit-Nutzung oder Abfrage: Gesamtkosten der serverlosen Aufgabe.
Snowflake analysiert die Aufgabenausführungen im Aufgabenverlauf, um dynamisch die passende Größe und Anzahl der serverlosen Computeressourcen zu ermitteln. Da Snowflake die Ressourcen zur Verwaltung Ihrer Aufgabenausführungen automatisch nach oben und unten skaliert, steigen die Kosten für das Ausführen der Aufgabenausführungen proportional an.
Weitere Informationen zur Anzahl der von Aufgaben verbrauchten Credits finden Sie in der „Serverless Feature Credit Table“ unter Snowflake Service Consumption Table.
Beachten Sie beim Erstellen von Aufgaben die folgenden bewährten Verfahren zur Kostenoptimierung:
Stellen Sie SCHEDULE so ein, dass die Ausführung weniger häufig erfolgt.
Verwenden Sie die Parameter zum automatischen Anhalten und automatischen Wiederholen, um die Verschwendung von Ressourcen durch fehlgeschlagene Aufgaben zu verhindern.
Erstellen Sie ein Budget und einen Alert zu Ausgabenlimits für serverlose Features. Weitere Informationen dazu finden Sie unter Credit-Nutzung mit Budgets überwachen.
Um die aktuelle Credit-Nutzung einer bestimmten Aufgabe abzurufen, fragen Sie die Tabellenfunktion SERVERLESS_TASK_HISTORY ab. Führen Sie die folgende Anweisung als Aufgabeneigentümer aus, wobei
<database_name>
die Datenbank ist, die die Aufgabe enthält, und<task_name>
der Name der Aufgabe ist:SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
Um die aktuelle Credit-Nutzung aller serverlosen Aufgaben abzurufen, fragen Sie die Tabellenfunktion SERVERLESS_TASK_HISTORY ab. Führen Sie die folgende Anweisung als Kontoadministrator aus:
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
Aufgabensicherheit¶
Um mit Aufgaben beginnen zu können, müssen Sie über die passenden Zugriffsrechte verfügen. Dieser Abschnitt beschreibt, wie Sie den Zugriff auf Aufgaben verwalten können.
Weitere Informationen zur Eigentümerschaft von Task-Graphen finden Sie unter Eigentümerschaft des Task-Graphen verwalten.
Zugriffssteuerungsrechte¶
Erstellen von Aufgaben¶
Für das Erstellen von Aufgaben ist eine Rolle mit mindestens den folgenden Berechtigungen erforderlich:
Objekt |
Berechtigung |
Anmerkungen |
---|---|---|
Konto |
EXECUTE MANAGED TASK |
Nur bei Aufgaben erforderlich, die serverlose Computeressourcen verwenden. |
Datenbank |
USAGE |
|
Schema |
USAGE, CREATE TASK |
|
Warehouse |
USAGE |
Nur für Aufgaben erforderlich, die auf benutzerverwaltete Warehouses angewiesen sind. |
Ausführen von Aufgaben¶
Nachdem eine Aufgabe erstellt wurde, muss der Aufgabeneigentümer über die folgenden Berechtigungen verfügen, um die Aufgabe ausführen zu können:
Objekt |
Berechtigung |
Anmerkungen |
---|---|---|
Konto |
EXECUTE TASK |
Erforderlich, um jegliche Aufgaben auszuführen, die der Rolle gehören. Durch das Widerrufen der Berechtigung EXECUTE TASK für eine Rolle wird verhindert, dass alle nachfolgenden Aufgaben unter dieser Rolle gestartet werden. |
Konto |
EXECUTE MANAGED TASK |
Nur bei Aufgaben erforderlich, die serverlose Computeressourcen verwenden. |
Datenbank |
USAGE |
|
Schema |
USAGE |
|
Aufgabe |
USAGE |
|
Warehouse |
USAGE |
Nur für Aufgaben erforderlich, die auf benutzerverwaltete Warehouses angewiesen sind. |
Darüber hinaus muss die Rolle über die erforderlichen Berechtigungen verfügen, um die von der Aufgabe ausgeführte SQL-Anweisung auszuführen.
Aufgabenverlauf anzeigen¶
Um Aufgaben anzuzeigen, müssen Sie über eine oder mehrere der folgenden Berechtigungen verfügen:
Rolle ACCOUNTADMIN
OWNERSHIP-Berechtigungen für die Aufgabe
Die globale Berechtigung MONITOR EXECUTION
Anhalten und Fortsetzen von Aufgaben¶
Zusätzlich zum Aufgabeneigentümer kann eine Rolle mit der Berechtigung OPERATE für die Aufgabe, die Aufgabe anhalten und fortsetzen. Diese Rolle muss die Berechtigung USAGE für die Datenbank und das Schema haben, die die Aufgabe enthalten. Es sind keine weiteren Berechtigungen erforderlich.
Wenn eine Aufgabe fortgesetzt wird, überprüft Snowflake, ob die Rolle des Aufgabeneigentümers die unter Ausführen von Aufgaben aufgeführten Berechtigungen aufweist.
Kundenspezifische Rollen zur Verwaltung von Aufgabenberechtigungen erstellen¶
Mit kundenspezifischen Rollen können Sie die Berechtigungen für jedes Konto oder jede Rolle in Snowflake einfach verwalten. Um Änderungen an den Berechtigungen für alle Konten oder Rollen vorzunehmen, die die kundenspezifische Rolle verwenden, aktualisieren Sie die kundenspezifische Rolle. Oder Sie entziehen die Berechtigungen, indem Sie die kundenspezifische Rolle entfernen.
Kundenspezifische Rolle zum Erstellen von Aufgaben erstellen¶
Snowflake erfordert unterschiedliche Berechtigungen für das Erstellen von serverlosen Aufgaben und von benutzerverwalteten Aufgaben.
Um beispielsweise benutzerverwaltete Aufgaben zu erstellen, erstellen Sie eine kundenspezifische Rolle namens warehouse_task_creation
und weisen Sie dieser Rolle die Berechtigungen CREATE TASK und USAGE für das Warehouse zu, in dem die Rolle Aufgaben erstellen kann.
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
Als Beispiel für eine Rolle, die serverlose Aufgaben erstellen kann, erstellen Sie eine kundenspezifische Rolle namens serverless_task_creation
und weisen der Rolle die Berechtigung CREATE TASK sowie auf Kontoebene die Berechtigung EXECUTE MANAGED TASK zu.
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
Kundenspezifische Rolle zum Verwalten von Aufgaben¶
Erstellen Sie eine kundenspezifische Rolle mit der Berechtigung EXECUTE TASK, und weisen Sie diese kundenspezifischen Rolle dann jeder Aufgabeneigentümerrolle zu, um das Ändern ihrer eigenen Aufgaben zu ermöglichen. Um zu verhindern, dass die Aufgabeneigentümerrolle die Aufgabe ausführt, muss der Aufgabeneigentümerrolle diese kundenspezifische Rolle entzogen werden.
Erstellen Sie beispielsweise eine kundenspezifische Rolle mit dem Namen taskadmin
, und erteilen Sie dieser Rolle die Berechtigung EXECUTE TASK. Weisen Sie die Rolle taskadmin
einer Aufgabeneigentümerrolle mit dem Namen myrole
zu:
USE ROLE securityadmin;
CREATE ROLE taskadmin;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
Setzen Sie die aktive Rolle auf ACCOUNTADMIN, bevor Sie der neuen Rolle die Berechtigungen auf Kontoebene erteilen.
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
Setzen Sie die aktive Rolle auf SECURITYADMIN, um zu zeigen, dass diese Rolle einer anderen Rolle eine Rolle zuweisen kann.
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
Weitere Informationen zum Erstellen von kundenspezifischen Rollen und Rollenhierarchien finden Sie unter Konfigurieren der Zugriffssteuerung.
Aufgabeneigentümerrolle löschen¶
Wenn Sie die Eigentümerrolle einer Aufgabe löschen, geht die Eigentümerschaft der Aufgabe an die Rolle über, die die Eigentümerrolle gelöscht hat. Wenn die Eigentümerschaft einer Aufgabe wechselt, wird die Aufgabe automatisch angehalten, und neue Ausführungen werden erst geplant, wenn der neue Eigentümer die Aufgabe fortsetzt.
Wenn Sie die Rolle löschen, während die Aufgabe ausgeführt wird, wird die Aufgabenausführung unter der gelöschten Rolle abgeschlossen.
Ausführung von Systemdienstaufgaben¶
Snowflake führt Aufgaben mit den Berechtigungen des Aufgabeneigentümer aus, aber die Aufgabenausführungen sind keinem Benutzer zugeordnet. Stattdessen wird jede Ausführung von einem Systemdienst ausgeführt. Aufgaben werden von bestimmten Benutzern entkoppelt, um Komplikationen zu vermeiden, die auftreten können, wenn Benutzer gelöscht oder aufgrund von Authentifizierungsproblemen gesperrt werden oder wenn Rollen entfernt werden.
Da Aufgabenausführungen von einem Benutzer entkoppelt sind, wird der Abfrageverlauf von Aufgabenausführungen dem Systemdienst zugeordnet. Daher gibt es keine Benutzeranmeldeinformationen für diesen Dienst, und keine Person kann seine Identität übernehmen. Die Aktivität für den Systemdienst ist auf Ihr Konto beschränkt. Der Dienst bietet dieselben Verschlüsselungsschutz- und weitere Sicherheitsprotokolle, wie sie auch für andere Operationen erzwungen werden.
Aufgaben-DDL¶
Um die Erstellung und Verwaltung von Aufgaben zu unterstützen, bietet Snowflake die folgenden speziellen DDL-Operationen:
Darüber hinaus können Anbieter den Zugriff auf die für ELT erforderlichen Datenbankobjekte mit der folgenden DDL-Standardzugriffssteuerung anzeigen, gewähren oder widerrufen:
DatabaseRoleResource-Methoden:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
RoleResource (Kontorolle) Methoden:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
UserResource-Methoden:
grant_role
iter_grants_to
revoke_role
Aufgabenfunktionen¶
Um das Abrufen von Informationen über Aufgaben zu unterstützen, bietet Snowflake die folgenden Funktionen: