Einführung in Aufgaben¶
Aufgaben verwenden benutzerdefinierte Funktionen, um Geschäftsprozesse zu automatisieren und Zeitpläne zu erstellen. Mit einer einzigen Aufgabe können Sie eine einfache bis komplexe Funktion in Ihrer Datenpipeline ausführen. Mit Task-Graphen (oder Aufgabendiagrammen) können Sie mehrere Aufgaben zu Datenpipelines zusammenstellen, um komplexe Anwendungsfälle zu verarbeiten. Sie können Aufgaben auch mit Tabellenstreams für kontinuierliche ELT-Workflows kombinieren, um kürzlich geänderte Daten zu verarbeiten.
Eine Aufgabe kann eine der folgenden Arten von Funktionen ausführen:
Eine einzelne SQL-Anweisung
Aufruf einer gespeicherten Prozedur
Prozedurale Logik mit Snowflake Scripting
Sie können getriggerte Aufgaben mit Tabellenstreams für kontinuierliche ELT-Arbeitsabläufe verwenden, um kürzlich geänderte Tabellenzeilen zu verarbeiten.
Aufgaben können auch unabhängig voneinander verwendet werden, um periodische Berichte zu generieren, indem Zeilen in eine Berichtstabelle eingefügt oder zusammengeführt werden oder andere periodische Arbeiten ausgeführt werden. Wenn Sie komplexe Geschäftsprozesse mit Aufgaben ausführen möchten, sollten Sie Diagramme für Aufgaben verwenden, um mehrere Aufgaben miteinander zu verknüpfen.
Bemerkung
Tabellenschemaentwicklung wird von Aufgaben nicht unterstützt.
Unter diesem Thema:
Workflow zum Erstellen von Aufgaben¶
Dieser Abschnitt bietet eine Übersicht zum Workflow, mit dem Sie Aufgaben einrichten.
Erstellen Sie eine Aufgabenadministratorrolle, mit der die Befehle in den folgenden Schritten ausgeführt werden können.
Erstellen Sie mit CREATE TASK eine Aufgabe. Die Aufgabe ist standardmäßig angehalten. In den folgenden Abschnitten finden Sie weitere Informationen zum Erstellen von Aufgaben:
Testen Sie Ihre Aufgaben mit manueller Aufgabenausführung.
Führen Sie ALTER TASK … RESUME aus, damit die Aufgabe auf Grundlage der in der Aufgabendefinition angegebenen Parameter ausgeführt werden kann. In den folgenden Abschnitten finden Sie weitere Informationen zu Aufgabenausführungen:
Computeressourcen¶
Aufgaben benötigen Computeressourcen zur Ausführung von SQL-Code. Für einzelne Aufgaben kann eines der folgenden Computemodelle gewählt werden:
Serverloses Computemodell
Benutzerverwaltete virtuelle Warehouses
Serverlose Aufgaben¶
Das serverlose Computemodell für Aufgaben ermöglicht es Ihnen, sich auf Snowflake-verwaltete Computeressourcen zu verlassen, anstatt auf benutzerverwaltete virtuelle Warehouses. Snowflake passt die Größe der serverlosen Computeressourcen automatisch an den jeweiligen Workload an. Snowflake bestimmt die ideale Größe der serverlosen Computeressourcen für eine bestimmte Ausführung auf der Grundlage einer dynamischen Analyse der Statistiken für die letzten Ausführungen derselben Aufgabe. Die maximale Computegröße für eine serverlose Aufgabe entspricht einem benutzerverwalteten virtuellen Warehouse der Größe XXLARGE. Mehrere Workloads in Ihrem Konto teilen sich einen gemeinsamen Satz von Computeressourcen.
Um das serverlose Computemodell zu verwenden, lassen Sie beim Erstellen einer Aufgabe mit CREATE TASK den Parameter WAREHOUSE weg. Beachten Sie, dass die Rolle, die den Befehl CREATE TASK ausführt, über die globale Berechtigung EXECUTE MANAGED TASK verfügen muss. Weitere Informationen zu den Anforderungen an die Zugriffssteuerung von Aufgaben finden Sie unter Aufgabensicherheit.
Die Abrechnung für die Ausführung von serverlosen Aufgaben unterscheidet sich von dem Standardmodell für den Credit-Verbrauch bei Aufgaben, für die virtuelle Warehouses als Computeressourcen eingesetzt werden. Weitere Informationen dazu finden Sie unter Kosten für Aufgaben.
Benutzerverwaltete Aufgaben¶
Sie können alternativ die Computeressourcen für einzelne Aufgaben verwalten, indem Sie beim Erstellen der Aufgabe ein bestehendes virtuelles Warehouse angeben. Diese Option erfordert, dass Sie ein Warehouse wählen, das für die SQL-Aktionen, die von der Aufgabe ausgeführt werden, angemessen dimensioniert ist.
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.
![Beispiel für ein Aufgaben-Batch-Fenster](../_images/task-batch-window.png)
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.
![Beispiel für ein Batch-Fenster eines Task-Graphen](../_images/tasks-tree-batch-window.png)
Empfehlungen zur Auswahl des Computemodells¶
In der folgenden Tabelle werden verschiedene Faktoren beschrieben, die Ihnen bei der Entscheidung helfen können, ob Sie serverlose Aufgaben oder benutzerverwaltete Aufgaben verwenden sollten:
Kategorie |
Serverlose Aufgaben |
Benutzerverwaltete Aufgaben |
Anmerkungen |
---|---|---|---|
Anzahl, Dauer und Vorhersagbarkeit des Workloads von parallelen Aufgaben |
Empfohlen für wenig ausgelastete Warehouses mit zu wenigen Aufgaben, die gleichzeitig ausgeführt oder schnell abgeschlossen werden. Aufgaben mit relativ stabilen Ausführungen sind gute Kandidaten für serverlose Aufgaben. |
Empfohlen für voll ausgelastete Warehouses mit mehreren gleichzeitigen Aufgaben. Ebenfalls empfohlen für unvorhersehbare Workloads auf den Computeressourcen. Multi-Cluster-Warehouses mit automatischem Anhalten und automatischem Fortsetzen können helfen, den Credit-Verbrauch zu reduzieren. |
Bei serverlosen Aufgaben rechnet Snowflake Ihr Konto auf der Grundlage der tatsächlichen Nutzung der Computeressourcen ab. Bei benutzerverwalteten Aufgaben erfolgt die Abrechnung der Warehouses auf Basis der Warehouse-Größe, wobei bei jedem Fortsetzen des Warehouses mindestens 60 Sekunden abgerechnet werden. |
Zeitplanintervall |
Empfohlen, wenn die Einhaltung des Zeitplanintervalls besonders wichtig ist. Wenn die Ausführung einer eigenständigen Aufgabe oder eines geplanten Task-Graphen das Intervall überschreitet, erhöht Snowflake die Größe der Computeressourcen. |
Empfohlen, wenn die Einhaltung des Zeitintervalls weniger wichtig ist. |
Planungsintervall bezieht sich auf das Zeitplanintervall zwischen geplanten Ausführungen einer eigenständigen Aufgabe oder der Stammaufgabe eines Task-Graphen. Das Erhöhen der Computeressourcen kann die Ausführungszeit einiger, aber nicht aller SQL-Codes reduzieren, stellt aber nicht sicher, dass eine Aufgabenausführung innerhalb des Batch-Fensters abgeschlossen wird. |
Die maximale Größe einer serverlosen Aufgabenausführung entspricht einem XXLARGE-Warehouse. Wenn der Workload einer Aufgabe ein größeres Warehouse erfordert, erstellen Sie eine benutzerverwaltete Aufgabe mit einem Warehouse der erforderlichen Größe.
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
Aufgabenplanung¶
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.
Eine eigenständige Aufgabe oder eine Stammaufgabe in einem Task-Graphen wird 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.
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¶
Sie können getriggerte Aufgaben (Triggered Tasks) verwenden, die nur ausgeführt werden, wenn ein definierter Stream neue Daten enthält. Dies vereinfacht einen häufigen Anwendungsfall, bei dem eine Quelle mit unvorhersehbarer Verfügbarkeit neuer Daten häufig abgefragt wird, und reduziert die Latenzzeit durch sofortige Verarbeitung, wenn neue Daten vorliegen.
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 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 die Ausführung, ohne Computeressourcen zu verwenden.
Erstellen von getriggerten Aufgaben¶
Um eine neue getriggerte Aufgabe zu erstellen, lassen Sie den Parameter SCHEDULE
weg und fügen den Zielstream in die Klausel-WHEN
ein.
CREATE TASK triggeredTask WAREHOUSE = my_warehouse
WHEN system$stream_has_data('my_stream')
AS
INSERT INTO my_downstream_table
SELECT * FROM my_stream;
ALTER TASK triggeredTask RESUME;
Um eine vorhandene Aufgabe von einer geplanten Aufgabe in eine getriggerte Aufgabe umzuwandeln, deaktivieren Sie den Parameter SCHEDULE
. 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;
Parameter von getriggerten Aufgaben weisen folgende Spezifika und Einschränkungen auf:
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 15 Sekunden.Die Trigger-Bedingungen der Aufgabe
WHEN
müssen auf Datenänderungen beruhen.Die When-Bedingung unterstützt die Verwendung von
AND
- undOR
-Bedingungen. DieAND
-Bedingung kann dazu führen, dass eine Aufgabe übersprungen wird, wenn nur einer der definierten Streams Daten enthält.
Hinweise zu getriggerten Aufgaben¶
Im Folgenden finden Sie Einzelheiten zur Verwaltung, Konfiguration und Überwachung von 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 der Stream oder die vom Stream verfolgte Tabelle gelöscht oder neu erstellt wird, wird die getriggerte Aufgabe automatisch angehalten. Nachdem Tabelle bzw. Stream neu erstellt wurde, kann der Benutzer
ALTER TASK <task_name> RESUME
ausführen, um die getriggerte Verarbeitung fortzusetzen.
Einschränkungen bei getriggerten Aufgaben¶
Getriggerte Aufgaben weisen folgende Einschränkungen auf:
Streams auf Datenfreigaben, Verzeichnistabellen, externe Tabellen und Hybridtabellen werden nicht unterstützt.
Serverlose Aufgaben werden nicht unterstützt.
Manuelles Ausführen von Aufgaben¶
Der Befehl EXECUTE TASK löst manuell eine einzelne Ausführung einer Aufgabe aus. Dieser SQL-Befehl ist nützlich, um neue oder geänderte Aufgaben zu testen, bevor diese für die Ausführung von SQL-Code in der Produktion aktiviert werden.
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 für 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.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
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.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
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;
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;
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;
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 das Erstellen und Verwalten von Aufgaben zu unterstützen, bietet Snowflake den folgenden Satz von speziellen DDL-Befehlen:
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:
Aufgabenfunktionen¶
Um das Abrufen von Informationen über Aufgaben zu unterstützen, bietet Snowflake die folgenden SQL-Funktionen: