Einführung in Aufgaben

Eine Aufgabe kann eine der folgenden Typen von SQL-Code ausführen:

  • Eine einzelne SQL-Anweisung

  • Aufruf einer gespeicherten Prozedur

  • Prozedurale Logik mit Snowflake Scripting

Aufgaben können mit Tabellenstreams für fortlaufende ELT-Workflows kombiniert werden, um kürzlich geänderte Tabellenzeilen zu verarbeiten. Streams stellen genau einmal die Semantik bei neuen oder geänderten Daten einer Tabelle sicher.

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.

Unter diesem Thema:

Computeressourcen

Aufgaben benötigen Computeressourcen zur Ausführung von SQL-Code. Für einzelne Aufgaben kann eines der folgenden Computemodelle gewählt werden:

  • Snowflake-verwaltet (d. h. serverloses Computemodell)

  • Benutzerverwaltet (d. h. virtuelles Warehouse)

Serverlose Aufgaben

Bemerkung

Unterstützt als Vorschaufunktion.

Das serverlose Computemodell für Aufgaben ermöglicht es Ihnen, sich auf Snowflake-verwaltete Computeressourcen zu verlassen, anstatt auf benutzerverwaltete virtuelle Warehouses. Die Computeressourcen werden von Snowflake je nach Workload automatisch in der Größe angepasst und skaliert. 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.

Die Option zur Aktivierung des serverlosen Computemodells muss angegeben werden, wenn eine Aufgabe erstellt wird. Die CREATE TASK-Syntax ist nahezu identisch mit Aufgaben, die auf benutzerverwalteten virtuellen Warehouses beruhen. Lassen Sie den Parameter WAREHOUSE weg, damit Snowflake die Verwaltung der Computeressourcen für die Aufgabe übernimmt. 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 etwas von dem Standardmodell für den Credit-Verbrauch bei Aufgaben, für die Warehouses als Computeressourcen eingesetzt werden. Weitere Informationen dazu finden Sie unter Abrechnung von Aufgabenausführungen.

Bemerkung

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

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

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

Benutzerverwaltete Aufgaben

Bei Bedarf können Sie alternativ die Computeressourcen für einzelne Aufgaben verwalten, indem Sie bei der Erstellung 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, empfehlen wir Ihnen, die unter Hinweise zu Warehouses beschriebenen bewährten Verfahren zu befolgen. Wir schlagen vor, dass Sie die durchschnittliche Ausführungszeit einer bestimmten Aufgabe oder eines bestimmten Aufgabenstrukturbaums anhand eines festgelegten Warehouses analysieren, basierend auf der Lagergröße und dem Clustering sowie der Frage, ob das Warehouse von mehreren Prozessen gemeinsam genutzt wird oder nur für die Ausführung dieser einen Aufgabe (oder dieses Aufgabenstrukturbaums) vorgesehen ist.

Fragen Sie die Account Usage-Ansicht TASK_HISTORY ab (in der freigegebenen SNOWFLAKE-Datenbank). Die durchschnittliche Differenz zwischen der geplanten und der tatsächlichen Ausführungszeit einer Aufgabe ist die erwartete durchschnittliche Ausführungszeit der Aufgabe, die auch die Wartezeit der Aufgabe in der Warteschlange einschließt. Eine Aufgabe wird in die Warteschlange gestellt, wenn im Moment alle Computeressourcen im Warehouse von anderen Prozessen verwendet werden.

Sofern die für die Aufgaben definierten SQL-Anweisungen nicht optimiert werden können (entweder durch Umschreiben der Anweisungen oder mithilfe gespeicherter Prozeduren), ist dies die erwartete durchschnittliche Ausführungszeit für die Aufgabe (oder den Aufgabenstrukturbaum). Wählen Sie anhand Ihrer Analyse die richtige Größe für das Warehouse aus, um sicherzustellen, dass die Aufgabe (oder der Aufgabenstrukturbaum) in diesem Fenster ausgeführt wird.

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.

Example task batch window

Die folgende Abbildung zeigt einen Aufgabenstrukturbaum, für dessen Ausführung durchschnittlich 5 Minuten erforderlich sind. Die Abbildung zeigt das Fenster für 2 Ausführungen des zu bearbeitenden Aufgabenstrukturbaums. Die Berechnung dieses Fensters beginnt beim geplanten Startzeitpunkt der Stammaufgabe und endet, wenn die letzte untergeordnete Aufgabe im Strukturbaum vollständig ausgeführt wurde. In diesem Beispiel wird der Aufgabenstrukturbaum für andere gleichzeitige Operationen freigegeben, die sich in der Warteschlange befinden, während jede der 3 Aufgaben im Baum ausgeführt wird. Diese parallelen Operationen verbrauchen alle verfügbaren Ressourcen, wenn die Ausführung jeder Aufgabe im Strukturbaum 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.

Beachten Sie, dass selbst bei Ausführung dieses Aufgabenstrukturbaums in einem dedizierten Warehouse eine kurze Verzögerung zwischen dem Ende der Ausführung einer Vorgängeraufgabe und dem Start einer untergeordneten Aufgabe auftritt. Allerdings wäre kein Warten in der Warteschlange für Ressourcen erforderlich, die gemeinsam mit anderen Operationen genutzt werden. Die von Ihnen gewählte Warehouse-Größe muss groß genug sein, um mehrere untergeordnete Aufgaben zu bedienen, die gleichzeitig von Vorgängeraufgaben ausgelöst werden.

Example tree of tasks batch window

Aufgabenplanung

Es gibt keine Ereignisquelle, die eine Aufgabe auslösen kann. Stattdessen wird eine Aufgabe nach einem Zeitplan ausgeführt, der beim Erstellen einer Aufgabe (mit CREATE TASK) oder später (mit ALTER TASK) definiert werden kann.

Snowflake stellt sicher, dass zu einem bestimmten Zeitpunkt immer nur eine Instanz einer Aufgabe mit einem Zeitplan (d. h. eine eigenständige Aufgabe oder die Stammaufgabe in einem Aufgabenstrukturbaum) 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 Aufgaben, die auf ein Warehouse angewiesen sind, um Computeressourcen bereitzustellen, wählen Sie die geeignete Warehouse-Größe für eine bestimmte Aufgabe aus, um deren Workload innerhalb des festgelegten Zeitplans zu erledigen. Weitere Informationen dazu finden Sie unter Auswählen einer Warehouse-Größe (unter diesem Thema).

Aufgabenplanung und Sommerzeit

Der Cron-Ausdruck in einer Aufgabendefinition unterstützt die Angabe einer Zeitzone. Eine geplante Aufgabe wird gemäß dem angegebenen Cron-Ausdruck in der Ortszeit für eine bestimmte Zeitzone ausgeführt. Bei der Planung von Aufgaben für Zeitzonen, die die Sommerzeit berücksichtigen, ist besondere Vorsicht geboten. Aufgaben, die zu bestimmten Zeiten 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 im Herbst wird eine Aufgabe, die um 1 AM in der Zeitzone Amerika/Los Angeles (d. h. 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. Das heißt, es gibt zwei Zeitpunkte, an denen die Ortszeit 1 AM ist.

  • Beim Wechsel von der Standardzeit zur Sommerzeit im Frühling wird eine Aufgabe, die um 2 AM in der Zeitzone Amerika/Los Angeles (d. h. 0 2 * * * America/Los_Angeles) beginnen soll, überhaupt nicht ausgeführt, da die lokale Zeit von 1:59:59 AM auf 3:00:00 AM wechselt. Das heißt, es gibt an diesem Tag keinen Zeitpunkt, an dem die Ortszeit 2 AM ist.

Um unerwartete Aufgabenausführungen aufgrund der Sommerzeit zu vermeiden, planen Sie entweder:

  • keine Ausführung von Aufgaben zu einer bestimmten Zeit zwischen 1 AM und 3 AM (täglich oder an Wochentagen, zu denen auch Sonntage gehören) oder

  • passen Sie den Cron-Ausdruck für Aufgaben, die während dieser Zeiten zweimal im Jahr geplant sind, manuell an, um die Zeitverschiebung wegen der Sommerzeit auszugleichen.

Einfache Baumstruktur aus Aufgaben

Benutzer können eine einfache baumartige Struktur von Aufgaben definieren, die mit einer Stammaufgabe beginnt und durch Aufgabenabhängigkeiten miteinander verbunden ist. Die aktuelle Implementierung unterstützt einen einzelnen Pfad zwischen zwei beliebigen Knoten, d. h. eine einzelne Aufgabe kann nur eine einzige Vorgängeraufgabe (d. h. übergeordnete Aufgabe) haben. Dies unterscheidet sich von einer Struktur vom Typ Directed Acyclic Graph (DAG), bei der ein einzelner Knoten mehrere Vorgängerknoten haben kann.

Tree of tasks

Eine Vorgängeraufgabe kann beim Erstellen einer Aufgabe definiert werden (mit CREATE TASK … AFTER) oder später (mit ALTER TASK … ADD AFTER). Die Stammaufgabe in der Baumstruktur sollte einen definierten Zeitplan haben. Jede der anderen Aufgaben in der Baumstruktur hat eine definierte Vorgängeraufgabe, um sie miteinander zu verknüpfen. Wenn die Ausführung einer Vorgängeraufgabe erfolgreich abgeschlossen wurde, wird die Ausführung aller untergeordneten Aufgaben ausgelöst, die diese Aufgabe in ihrer Definition als Vorgänger identifizieren.

Ein einfacher Aufgabenstrukturbaum ist auf maximal 1.000 Aufgaben insgesamt (einschließlich der Stammaufgabe) beschränkt. Eine einzelne Aufgabe im Strukturbaum kann nur eine Vorgängeraufgabe haben. Eine Aufgabe kann jedoch bis zu 100 untergeordnete Aufgaben aufweisen (d. h. andere Aufgaben, die die Aufgabe als Vorgänger identifizieren).

Bemerkung

Eine kurze Verzögerung tritt auf, nachdem eine Vorgängeraufgabe beendet und eine untergeordnete Aufgabe ausgeführt wird.

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

Einfacher Aufgabenstrukturbaum und Aufgabeneigentümerschaft

Alle Aufgaben einer einfachen Baumstruktur müssen denselben Aufgabeneigentümer haben (d. h. eine einzelne Rolle muss über die Berechtigung OWNERSHIP für alle Aufgaben in der Baumstruktur verfügen) und in derselben Datenbank und in demselben Schema gespeichert sein.

Wenn die Eigentümerschaft aller Aufgaben in einem Aufgabenstrukturbaum durch eine der folgenden Aktivitäten gleichzeitig übertragen wird, bleiben die Verknüpfungen zwischen allen Aufgaben im Strukturbaum erhalten:

  • Der aktuelle Eigentümer aller Aufgaben, aus denen der Aufgabenstrukturbaum besteht, wird gelöscht (mit DROP ROLE). Die Eigentümerschaft an allen Objekten, die der gelöschten Rolle gehören, wird auf die Rolle übertragen, die den Befehl DROP ROLE ausführt.

  • Die Eigentümerschaft aller Aufgaben, aus denen sich der Aufgabenstrukturbaum zusammensetzt, wird explizit auf eine andere Rolle übertragen (z. B. durch Ausführen von GRANT OWNERSHIP für alle Aufgaben in einem Schema).

Strukturbaum mit überlappenden Aufgabenausführungen

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

Das Verhalten wird durch den Parameter ALLOW_OVERLAPPING_EXECUTION der Stammaufgabe gesteuert. Der Standardwert ist FALSE.

Im folgenden Beispiel wird der Start einer Ausführung eines Aufgabenstrukturbaums geplant, wenn eine vorherige Ausführung noch nicht abgeschlossen ist. Der Zeitraum der Überlappung bzw. Gleichzeitigkeit ist rot gekennzeichnet. Die Abbildung zeigt auch die Zeitspanne an, in der sich jede Aufgabe in der Warteschlange befindet, bevor sie im benutzerverwalteten Warehouse ausgeführt wird: Beachten Sie, dass es bei der Verwendung von Snowflake-verwalteten Computeressource keine Wartezeit gibt:

Overlapping task tree runs

Überlappende Ausführungen können toleriert werden (oder sind sogar erwünscht), wenn SQL-Lese-/Schreiboperationen, die durch überlappende Ausführungen eines Aufgabenstrukturbaums ausgeführt werden, keine falschen oder duplizierten Daten erzeugen. Für andere Strukturbäume sollten Aufgabeneigentümer (d. h. die Rolle mit OWNERSHIP-Berechtigung für alle Aufgaben im Strukturbaum) einen geeigneten Zeitplan für die Stammaufgabe festlegen und eine geeignete Warehouse-Größe auswählen (oder Snowflake-verwaltete Computeressourcen verwenden), um sicherzustellen, dass eine Instanz des Aufgabenstrukturbaums bis zum Ende ausgeführt wird, bevor die Stammaufgabe das nächste Mal geplant wird.

So stimmen Sie einen Aufgabenstrukturbaum besser mit dem in der Stammaufgabe definierten Zeitplan ab:

  1. Erhöhen Sie, falls möglich, die Planungszeit zwischen den Ausführungen der Stammaufgabe.

  2. Erwägen Sie, rechenintensive Aufgaben so zu ändern, dass sie von Snowflake verwaltete Computeressourcen nutzen. Wenn die Aufgabe auf benutzerverwaltete Computeressourcen angewiesen ist, sollten Sie die Größe des Warehouses erhöhen, das große oder komplexe SQL-Anweisungen oder gespeicherte Prozeduren im Aufgabenstrukturbaum ausführt.

  3. Analysieren Sie die SQL-Anweisungen oder gespeicherten Prozeduren, die von jeder Aufgabe ausgeführt werden. Stellen Sie fest, ob sich der Code umschreiben lässt, um die Parallelverarbeitung nutzen zu können.

Wenn keine der obigen Lösungen hilft, überlegen Sie, ob es notwendig ist, gleichzeitige Ausführungen des Strukturbaums durch Festlegen von ALLOW_OVERLAPPING_EXECUTION = TRUE für die Stammaufgabe zuzulassen. Dieser Parameter kann beim Erstellen einer Aufgabe definiert werden (mit CREATE TASK) oder später (mit ALTER TASK).

Versionierung von Ausführungen

Wenn eine eigenständige Aufgabe oder die Stammaufgabe in einem Strukturbaum zum ersten Mal fortgesetzt (oder manuell mit EXECUTE TASK ausgeführt) wird, wird eine Startversion der Aufgabe festgelegt. Wenn die Aufgabe eine Stammaufgabe ist, dann wird eine Version des gesamten Aufgabenstrukturbaums eingestellt, einschließlich aller Eigenschaften für alle Aufgaben im Strukturbaum. Die eigenständige Aufgabe oder der Aufgabenstrukturbaum werden mit dieser Version ausgeführt. Nachdem eine Aufgabe angehalten und geändert wurde, wird beim Fortsetzen oder manuellen Ausführen der eigenständigen Aufgabe bzw. der Stammaufgabe eine neue Version festgelegt.

Um eine beliebige Aufgabe in einem Aufgabenstrukturbaum zu ändern oder neu zu erstellen, muss die Stammaufgabe zunächst angehalten werden (mit ALTERTASK … SUSPEND). Wenn die Stammaufgabe angehalten wird, werden alle zukünftigen geplanten Ausführungen der Stammaufgabe abgebrochen. Wenn sich Aufgaben jedoch gerade in Ausführung befinden (d. h. die Aufgaben haben den Status EXECUTING), werden diese Aufgaben und alle nachfolgenden Aufgaben weiterhin mit der aktuellen Version ausgeführt.

Bemerkung

Wenn sich die Definition einer gespeicherten Prozedur, die von einer Aufgabe aufgerufen wurde, während der Ausführung des Aufgabenstrukturbaums ändert, kann der geänderte Code der gespeicherten Prozedur bei Aufruf durch die Aufgabe bereits in der aktuellen Ausführung zur Anwendung kommen.

Angenommen, die Stammaufgabe im Aufgabenstrukturbaum wird angehalten, aber eine geplante Ausführung dieser Aufgabe hat bereits begonnen. Der Eigentümer des Strukturbaums ändert den von einer untergeordneten Aufgabe aufgerufenen SQL-Code, während sich die Stammaufgabe noch in Ausführung befindet. Die untergeordnete Aufgabe wird ausgeführt und führt den SQL-Code in ihrer Definition aus, wobei die Version des Aufgabenstrukturbaums verwendet wird, die aktuell war, als die Ausführung der Stammaufgabe begann. Wenn die Stammaufgabe fortgesetzt oder manuell ausgeführt wird, wird eine neue Version des Aufgabenstrukturbaums erstellt. Diese neue Version enthält die an der untergeordneten Aufgabe vorgenommenen Änderungen.

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 fest (mit ALTER TASKSET Sitzungsparameter = Wert[, Sitzungsparameter = Wert ... ]).

Eine Aufgabe unterstützt alle Sitzungsparameter. Die vollständige Liste finden Sie unter Parameter.

Beachten Sie, dass eine Aufgabe keine Konto- oder Benutzerparameter unterstützt.

Manuelles Ausführen von Aufgaben

Mit dem Befehl EXECUTE TASK wird manuell eine asynchrone Einzelausführung einer geplanten Aufgabe (entweder eine eigenständige Aufgabe oder die Stammaufgabe in einem Aufgabenstrukturbaum) ausgeführt, unabhängig von dem für die Aufgabe definierten Zeitplan. Die erfolgreiche Ausführung einer Stammaufgabe löst eine kaskadierende Ausführung der untergeordneten Aufgaben im Strukturbaum aus, sobald deren vorhergehende Aufgabe abgeschlossen ist, so als ob die Stammaufgabe nach ihrem definierten Zeitplan ausgeführt worden wäre.

Dieser SQL-Befehl ist nützlich, um neue oder geänderte eigenständige Aufgaben bzw. Aufgabenstrukturbäume zu testen, bevor diese für die Ausführung von SQL-Code in der Produktion aktiviert werden.

Rufen Sie diesen SQL-Befehl direkt in Skripten oder gespeicherten Prozeduren auf. 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.

Bemerkung

Unterstützt als Vorschaufunktion.

Anzeigen des Aufgabenverlaufs für Ihr Konto

Die folgenden Rollen (oder Rollen mit den angegebenen Berechtigungen) können SQL verwenden, um den Aufgabenverlauf innerhalb eines angegebenen Datumsbereichs anzuzeigen:

  • Kontoadministratoren (d. h. Benutzer mit der Rolle ACCOUNTADMIN)

  • Aufgabeneigentümer (d. h. Rolle mit der Berechtigung OWNERSHIP für eine Aufgabe)

  • Jede Rolle mit der globalen Berechtigung MONITOR EXECUTION

So zeigen Sie den Aufgabenverlauf an:

SQL

Fragen Sie die Tabellenfunktion TASK_HISTORY ab (im Snowflake Information Schema).

Abrechnung von Aufgabenausführungen

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.

Snowflake-verwaltete Ressourcen (d. h. serverloses Computemodell)

Im Gegensatz zu kundenverwalteten virtuellen Warehouses, die bereits bei Aktivierung Credits verbrauchen und auch ungenutzt bleiben oder überlastet sein können, rechnet Snowflake Ihr Konto auf der Grundlage ihrer tatsächlichen Nutzung von Computeressourcen 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.

Snowflake analysiert die Aufgabenausführungen im Aufgabenverlauf dynamisch, um die ideale Größe der Computeressourcen zu ermitteln, und hält diese Computeressourcen an, um Kosten zu sparen. Snowflake verwaltet die Auslastung und sorgt so dafür, dass optimale Computeressourcen zur Deckung des Bedarfs bereitstehen. Um die Verwaltungskosten der von Snowflake bereitgestellten Computeressourcen zu decken, wenden wir einen 1,5-fachen Multiplikator auf den Ressourcenverbrauch an. Es ist jedoch zu beachten, dass das serverlose Computemodell die Berechnungskosten im Vergleich zu benutzerverwalteten Warehouses immer noch senken könnte, in einigen Fällen sogar erheblich.

Snowflake-Credits werden pro Computestunde berechnet:

  • Snowflake-verwaltete Computeressourcen: 1,5

  • Clouddienste: 1

Die Abrechnung ähnelt anderen Snowflake-Funktionen wie Automatic Clustering von Tabellen, Datenbankreplikation und Failover/Failback sowie Snowpipe.

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 (d. h. mit der Rolle, die über OWNERSHIP-Berechtigung für die Aufgabe verfügt):

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>')
    )
  );

Wobei:

<Datenbankname>

Name der Datenbank, die die Aufgabe enthält.

<Aufgabenname>

Name der Aufgabe.

Um die aktuelle Credit-Nutzung aller serverlosen Aufgaben abzurufen, fragen Sie die Tabellenfunktion SERVERLESS_TASK_HISTORY ab. Führen Sie die folgenden Anweisungen als Kontoadministrator (d. h. als Benutzer mit der Rolle ACCOUNTADMIN) 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;

Grundlegendes zum Systemdienst

Snowflake führt Aufgaben mit den Berechtigungen des Aufgabeneigentümer aus (d. h. der Rolle, die die Berechtigung OWNERSHIP für die Aufgabe besitzt), die Aufgabenausführung ist jedoch 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. SYSTEM ist kein Benutzer im Konto, sondern ein Hintergrunddienst. Daher gibt es keine Benutzeranmeldeinformationen für diesen Dienst, und keine Person (von Snowflake oder in Ihrem Konto) 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:

Aufgabensicherheit

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 für Aufgaben erforderlich, die auf Snowflake-verwaltete Computeressourcen (serverloses Computemodell) angewiesen sind.

Datenbank

USAGE

Schema

USAGE, CREATE TASK

Warehouse

USAGE

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

Eigene Aufgaben

Nachdem eine Aufgabe erstellt wurde, muss der Aufgabeneigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für die Aufgabe) über die folgenden Berechtigungen verfügen:

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 für Aufgaben erforderlich, die auf Snowflake-verwaltete Computeressourcen angewiesen sind.

Datenbank

USAGE

Schema

USAGE

Aufgabe

OWNERSHIP

Warehouse

USAGE

Darüber hinaus muss die Rolle über die erforderlichen Berechtigungen verfügen, um die von der Aufgabe ausgeführte SQL-Anweisung auszuführen.

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 Eigene Aufgaben (unter diesem Thema) aufgeführten Berechtigungen aufweist.

Erstellen einer Aufgabenadministratorrolle

Zur Vereinfachung der Verwendung empfehlen wir das Erstellen einer benutzerdefinierten Rolle (z. B. taskadmin) und das Zuweisen der Berechtigung EXECUTE TASK an diese Rolle. Jede Rolle, die Berechtigungen erteilen kann (z. B. SECURITYADMIN oder jede Rolle mit der Berechtigung MANAGE GRANTS) kann diese benutzerdefinierte Rolle dann jeder Aufgabeneigentümerrolle zuweisen, um eine Änderung ihrer eigenen Aufgaben zu ermöglichen. Um zu verhindern, dass die Aufgabeneigentümerrolle die Aufgabe ausführt, muss der Aufgabeneigentümerrolle nur diese benutzerdefinierte Rolle entzogen werden. Beachten Sie, dass ein Kontoadministrator die Berechtigung EXECUTE TASK für die Rolle des Aufgabeneigentümers widerrufen muss, wenn Sie diese benutzerdefinierte Rolle nicht erstellen möchten.

Erstellen Sie beispielsweise eine benutzerdefinierte 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;

-- set the active role to ACCOUNTADMIN before granting the account-level privileges to the new role
USE ROLE accountadmin;

GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;

-- set the active role to SECURITYADMIN to show that this role can grant a role to another role
USE ROLE securityadmin;

GRANT ROLE taskadmin TO ROLE myrole;

Weitere Informationen zum Erstellen von benutzerdefinierten Rollen und Rollenhierarchien finden Sie unter Konfigurieren der Zugriffssteuerung.

Löschen einer Aufgabeneigentümerrolle

Wenn die Eigentümerrolle einer bestimmten Aufgabe (d. h. die Rolle mit der Berechtigung OWNERSHIP für die Aufgabe) gelöscht wird, geht die Eigentümerschaft der Aufgabe wieder an die Rolle zurück, die die Eigentümerrolle gelöscht hat. Dadurch wird sichergestellt, dass die Eigentümerschaft auf eine Rolle übertragen wird, die in der Rollenhierarchie näher an der Stammrolle liegt. Wenn eine Aufgabe wieder in Besitz genommen wird, wird sie automatisch angehalten, d. h. alle Ausführungen, die sich derzeit in Verarbeitung befinden, werden abgeschlossen, während neue Ausführungen erst wieder geplant werden, wenn die Aufgabe vom neuen Eigentümer explizit wieder aufgenommen wird. Dadurch soll verhindert werden, dass ein Benutzer mit Zugriff auf eine bestimmte Rolle Aufgaben zurücklässt, die plötzlich mit höheren Berechtigungen ausgeführt werden, wenn die Rolle entfernt wird.

Wenn die Rolle, unter der eine ausgeführte Aufgabe ausgeführt wird, gelöscht wird, während die Aufgabe ausgeführt wird, schließt die Aufgabe die Verarbeitung unter der gelöschten Rolle ab.

Workflow

Dieser Abschnitt bietet einen allgemeinen Überblick über den Workflow zum Einrichten von Aufgaben.

  1. Führen Sie die Schritte in Erstellen einer Aufgabenadministratorrolle (unter diesem Thema) aus, um eine Rolle zu erstellen, mit der die Befehle in den folgenden Schritten ausgeführt werden können.

  2. Erstellen Sie mit CREATE TASK eine Aufgabe. Die Aufgabe ist standardmäßig angehalten.

    Bemerkung

    Überprüfen Sie, ob die SQL-Anweisung, auf die Sie in einer Aufgabe verweisen, wie erwartet ausgeführt wird, bevor Sie die Aufgabe erstellen. Aufgaben dienen dazu, SQL-Anweisungen oder gespeicherte Prozeduren zu automatisieren, die bereits gründlich getestet wurden.

  3. Führen Sie ALTER TASK … RESUME aus, damit die Aufgabe auf Grundlage der in der Aufgabendefinition angegebenen Parameter ausgeführt werden kann.