Einführung in Aufgaben

Verwenden Sie Aufgaben, um Geschäftsabläufe in Ihrer Datenpipeline zu automatisieren, zu planen und zu optimieren.

In Snowflake kann eine Aufgabe einen Aufruf einer gespeicherten Prozedur mit unterstützten Sprachen und Tools wie SQL, JavaScript, Python, Java, Scala oder Snowflake Scripting ausführen. Weitere Python-Beispiele finden Sie unter Verwalten von Snowflake-Aufgaben und Task-Graphen mit Python.

Sie können eine Sequenz von Aufgaben kombinieren, indem Sie Task-Graphen erstellen. Task-Graphen können mit Hilfe von Logik dynamisches Verhalten zeigen, indem sie Aufgaben parallel oder nacheinander ausführen.

Bemerkung

Tabellenschemaentwicklung wird von Aufgaben nicht unterstützt.

Unter diesem Thema:

Überblick über den Workflow zur Aufgabenerstellung

  1. Erstellen Sie eine Aufgabenadministratorrolle, mit der die Befehle in den folgenden Schritten ausgeführt werden können.

  2. Definieren Sie eine neue Aufgabe mit CREATE TASK.

  3. Testen Sie Aufgaben manuell mit EXECUTE TASK.

  4. Lassen Sie die Aufgabe kontinuierlich laufen, indem Sie ALTER TASK. .. RESUME verwenden.

  5. Aufgabenkosten überwachen

  6. Verfeinern Sie die Aufgabe nach Bedarf mit ALTER TASK.

Informationen zur Ausführung von Aufgaben finden Sie unter:

Computeressourcen zuweisen

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

Dieses Modell wird für Aufgaben empfohlen, die regelmäßig oder halb regelmäßig ausgeführt werden, wie z. B. die folgenden:

  • Aufgaben, die immer zur gleichen Zeit beginnen.

  • Aufgaben, die nur ausgeführt werden, wenn neue Daten eintreffen. (Weitere Informationen dazu finden Sie unter Getriggerte Aufgaben.)

Einschränkungen

  • Die maximale Berechnungsgröße für eine serverlose Aufgabe entspricht einem XXLARGE virtuellen Warehouse.

  • Die Gesamtzeit der Aufgabe kann eine Verzögerung vor dem Start der Aufgabe beinhalten. Weitere Informationen dazu finden Sie unter Dauer der Aufgabe.

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 die Aufgabe ausführt, muss über die 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: das Zeitfenster, in dem die Aufgabe ausgeführt werden soll.

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.

Diagramm zur Veranschaulichung des Rechenmodells für serverlose Aufgaben.

Sie können den Zielzeitrahmen mit TARGET_COMPLETION_INTERVAL festlegen. 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.

Diagramm mit einer serverlosen Aufgabe, die täglich zwischen Mitternacht und 2 Uhr morgens ausgeführt werden soll.

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, bis hinunter zur SERVERLESS_TASK_MIN_STATEMENT_SIZE.

  • 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. Wenn SERVERLESS_TASK_MAX_STATEMENT_SIZE erreicht ist, werden die Aufgaben fortgesetzt (wobei die Zielzeit möglicherweise überschritten wird), bis sie abgeschlossen sind oder ein Timeout eintritt.

Beispiele

Beispiel 1: Erstellen Sie eine serverlose Aufgabe, die jede Stunde ausgeführt wird. Snowflake weist serverlose Computeressourcen zu, die die Aufgabe voraussichtlich innerhalb der geplanten Zeit erledigen können.

CREATE TASK SCHEDULED_T1
  SCHEDULE='60 MINUTES'
  AS SELECT 1;
Copy

Beispiel 2: Erstellen Sie eine serverlose Aufgabe, die jeden Tag um Mitternacht beginnt und 2 Stunden lang läuft. Der Zeitplan (mit CRON) legt fest, wann die Aufgabe beginnt, einschließlich der Zeitzone. Das Ziel-Erledigungsintervall legt fest, wann die Aufgabe abgeschlossen werden soll. Snowflake schätzt und weist serverlose Berechnungen so zu, dass die Aufgabe innerhalb der geplanten Zeit abgeschlossen wird.

CREATE TASK SCHEDULED_T2
  SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
  TARGET_COMPLETION_INTERVAL='120 MINUTE'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

Beispiel 3: Erstellen Sie eine serverlose Aufgabe, die einmal pro Tag 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'
  SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

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.

Beispiel 4: Erstellen Sie eine serverlose Aufgabe, die so geplant ist, dass sie alle 10 Sekunden ausgeführt wird, ohne ein Zielintervall für die Fertigstellung:

CREATE TASK SCHEDULED_T4
  SCHEDULE='10 SECONDS'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

Bei dieser Konfiguration wird die serverlose Aufgabe alle 10 Sekunden 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. Weitere Informationen dazu finden Sie unter Dauer der Aufgabe.

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.

Definieren Sie Zeitpläne oder Trigger

Eine Aufgabe kann so eingestellt werden, dass sie nach einem festen Zeitplan abläuft, oder sie kann durch ein Ereignis getriggert werden, z. B. wenn ein Stream neue Daten enthält.

Hinweis: Auch wenn ein Zeitplan oder Trigger definiert ist, startet die Aufgabe in einem ausgesetzten Zustand. Später können Sie die Aufgabe mit EXECUTE TASK einmalig starten oder sie mit ALTER TASK. .. RESUME kontinuierlich laufen lassen.

Eine Aufgabe nach einem festen Zeitplan ausführen

Um Aufgaben nach einem festen Zeitplan auszuführen, definieren Sie den Zeitplan beim Erstellen oder Ändern der Aufgabe mit CREATE TASK oder ALTER TASK oder durch Bearbeiten der Aufgabe in Snowsight unter Verwendung des Parameters SCHEDULE.

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.

Das folgende Beispiel erstellt eine Aufgabe, die alle 10 Sekunden ausgeführt wird:

CREATE TASK task_runs_every_10_seconds
  SCHEDULE='10 SECONDS'
  AS SELECT 1;
Copy

Um einen Zeitplan auf der Grundlage einer bestimmten Uhrzeit oder eines bestimmten Tages zu definieren, verwenden Sie den Parameter SCHEDULE =‘USING CRON. ..‘.

Das folgende Beispiel erstellt eine Aufgabe, die jeden Sonntag um 3 Uhr nachts in der Zeitzone Americas/Los_Angeles ausgeführt wird.

CREATE TASK task_sunday_3_am_pacific_time_zone
  SCHEDULE='USING CRON 0 3 * * SUN America/Los_Angeles'
AS SELECT 1;
Copy

Weitere Informationen dazu finden Sie unter CREATETASK … SCHEDULE.

Eine Aufgabe ausführen, sobald ein Stream neue Daten enthält

Verwenden Sie Getriggerte Aufgaben, um Aufgaben auszuführen, wenn ein definierter Stream neue Daten enthält, z. B. in Workflows zum Extrahieren, Laden und Transformieren (ELT). 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. Beispiel:

CREATE TASK triggered_task_stream
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS
    INSERT INTO completed_promotions
    SELECT order_id, order_total, order_time, promotion_id
    FROM orders_stream;
Copy

Weitere Informationen dazu finden Sie unter Getriggerte Aufgaben.

Nach einem Zeitplan ausführen, aber nur, wenn ein Stream neue Daten enthält

Sie können eine geplante Aufgabe mit einer getriggerten Aufgabe kombinieren. Sie können zum Beispiel eine Aufgabe so einstellen, dass sie jede Stunde ausgeführt wird, aber nur, wenn der Stream neue Daten enthält. Beispiel:

CREATE TASK triggered_task_stream
  SCHEDULE = '1 HOUR'
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
  AS SELECT 1;
Copy

Definieren Sie, was passiert, wenn eine Aufgabe fehlschlägt

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.

Definieren Sie zusätzliche Sitzungsparameter

Eine Aufgabe unterstützt alle Sitzungsparameter. Die vollständige Liste finden Sie unter Parameter. Aufgaben unterstützen keine Konto- oder Benutzerparameter.

Um Sitzungsparameter für eine Aufgabe festzulegen, fügen Sie den Parameter mit CREATE TASK zur Aufgabendefinition hinzu, oder ändern Sie die Aufgabe mit ALTER TASK. .. SET. Beispiele:

CREATE TASK my_task
  SCHEDULE = 'USING CRON 0 * * * * UTC'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AS
    INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy
ALTER TASK my_task
  SET USER_TASK_TIMEOUT_MS = 10000  -- Changes maximum runtime to 10 seconds
Copy

Ausführen von Aufgaben

Dieser Abschnitt beschreibt die verschiedenen Möglichkeiten, wie eine Aufgabe geplant und ausgeführt werden kann, und wie die Version einer Aufgabe bestimmt wird.

Eine Aufgabe manuell ausführen

Nachdem Sie mit CREATE TASK oder ALTER TASK eine neue Aufgabe und ihre Parameter eingerichtet haben, können Sie mit EXECUTE TASK einen einzelnen Lauf der Aufgabe starten. Dieser Befehl ist nützlich, um neue oder geänderte Aufgaben zu testen.

Bemerkung

  • Sie können diesen SQL-Befehl direkt in Skripten oder gespeicherten Prozeduren aufrufen.

  • Dieser Befehl unterstützt die Integration von Aufgaben in externe Datenpipelines.

  • Jeder Dienst eines Drittanbieters, der sich bei Ihrem Snowflake-Konto authentifizieren und SQL-Aktionen autorisieren kann, kann Aufgaben mit dem Befehl EXECUTE TASK ausführen.

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.

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.

  • Richten Sie Getriggerte Aufgaben für Aufgaben ein, die nur unter bestimmten Bedingungen ausgeführt werden müssen, z. B. wenn ein Datenstrom neue Daten enthält.

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

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;
Copy

Überwachen der Kosten

Serverlose Aufgaben verursachen Rechenkosten, wenn sie genutzt werden. Sie können kostenbezogene Ansichten in den Schemas ACCOUNT_USAGE und ORGANIZATION_USAGE verwenden, um die mit den serverlosen Aufgaben verbundenen Kosten zu verfolgen. Wenn Sie diese Ansichten abfragen, filtern Sie nach der Spalte service_type, um die Werte SERVERLESS_TASK oder SERVERLESS_TASK_FLEX zu finden.

Ansicht

Schema

service_type

Rollen mit erforderlichen Berechtigungen

METERING_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle

METERING_DAILY_HISTORY

ACCOUNT_USAGE

SERVERLESS_TASK

ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle

METERING_DAILY_HISTORY

ORGANIZATION_USAGE

SERVERLESS_TASK

ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle

USAGE_IN_CURRENCY_DAILY

ORGANIZATION_USAGE

SERVERLESS_TASK

ORGADMIN-Rolle GLOBALORGADMIN-Rolle ORGANIZATION_USAGE_VIEWER-Datenbankrolle

Beispiel: Zeigen Sie die Gesamtkosten des Kontos an, die durch serverlose Aufgaben im gesamten Unternehmen entstanden sind.

Beispiel: Zeigen Sie die Gesamtkosten des Kontos an, die für die serverlose Aufgabe zwischen dem 1. Dezember 2024 und dem 31. Dezember 2024 entstanden sind.

SELECT
 name,
 SUM(credits_used_compute) AS total_credits
FROM
  SNOWFLAKE.ACCOUNT_USAGE.METERING_HISTORY
WHERE
 service_type ILIKE '%SERVERLESS_TASK%'
 AND start_time >= '2024-12-01'
 AND end_time <= '2024-12-31'
GROUP BY
 name
ORDER BY
 name ASC;
Copy

Beispiel: Zeigen Sie die Gesamtkosten des Kontos an, die durch serverlose Aufgaben im gesamten Unternehmen entstanden sind.

SELECT
  usage_date AS date,
  account_name,
  SUM(usage) AS credits,
  currency,
  SUM(usage_in_currency) AS usage_in_currency
FROM
  SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY
WHERE
  USAGE_TYPE ILIKE '%SERVERLESS_TASK%'
GROUP BY
  usage_date, account_name, currency
ORDER BY
  USAGE_DATE DESC;
Copy

Informationen darüber, wie viele Credit-Gebühren pro Rechenstunde für den Betrieb des Trust Center anfallen, finden Sie in Tabelle 5 unter Snowflake Service Consumption Table.

Dauer der Aufgabe

Die Aufgabendauer umfasst die Zeit zwischen dem geplanten Start einer Aufgabe und dem Abschluss ihrer Ausführung. Diese Dauer umfasst beide der folgenden Punkte:

  • Wartezeit: Die Zeit, die eine Aufgabe darauf wartet, dass Computeressourcen verfügbar werden, bevor sie mit der Ausführung beginnt. Um die Zeit in der Warteschlange zu berechnen, fragen Sie Ansicht TASK_HISTORY ab und vergleichen SCHEDULED_TIME mit QUERY_START_TIME.

  • Ausführungszeit: Die Zeit, die die Aufgabe benötigt, um ihre SQL-Anweisungen oder andere Operationen auszuführen. Um die Ausführungszeit zu berechnen, fragen Sie Ansicht TASK_HISTORY ab, und vergleichen Sie QUERY_START_TIME mit COMPLETED_TIME.

Das folgende Diagramm zeigt zum Beispiel eine serverlose Aufgabe, die alle 15 Sekunden ausgeführt werden soll. Die Gesamtdauer dieses Aufgabenlaufs beträgt 12 Sekunden, wovon 5 Sekunden auf die Warteschlange und 7 Sekunden auf die Ausführung entfallen.

Ein Diagramm einer Aufgabe mit einer Wartezeit von 5 Sekunden und einer Ausführungszeit von 7 Sekunden. Die Aufgabe ist so geplant, dass sie alle 15 Sekunden ausgeführt wird.

Timeouts

Wenn die Ausführung einer Aufgabe die geplante Zeit oder das Zielintervall für die Fertigstellung überschreitet, wird die Aufgabe standardmäßig weiter ausgeführt, bis sie abgeschlossen ist, eine Zeitüberschreitung eintritt oder sie fehlschlägt.

Wenn sowohl STATEMENT_TIMEOUT_IN_SECONDS als auch label-user_task_timeout_ms gesetzt sind, ist das Timeout der niedrigste Nicht-Null-Wert der beiden Parameter.

Wenn sowohl STATEMENT_QUEUED_TIMEOUT_IN_SECONDS als auch USER_TASK_TIMEOUT_MS eingestellt sind, hat der Wert von USER_TASK_TIMEOUT_MS Vorrang.

Informationen über Timeouts bei Task-Graphen finden Sie unter Timeouts im Task-Graphen.

Hinweise

  • Bei serverlosen Aufgaben skaliert Snowflake automatisch die Ressourcen, um sicherzustellen, dass die Aufgaben innerhalb eines Zielintervalls abgeschlossen werden, einschließlich der Zeit für die Warteschlangenbildung.

  • Bei vom Benutzer verwalteten Aufgaben sind längere Wartezeiten üblich, wenn die Aufgaben in einem gemeinsam genutzten oder stark frequentierten Warehouse ausgeführt werden sollen.

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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE warehouse_task_creation;
Copy
GRANT USAGE
  ON WAREHOUSE warehouse1
  TO ROLE warehouse_task_creation;
Copy

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.';
Copy
USE ACCOUNTADMIN;

GRANT CREATE TASK
  ON SCHEMA schema1
  TO ROLE serverless_task_creation;
Copy
GRANT EXECUTE MANAGED TASK ON ACCOUNT
  TO ROLE serverless_task_creation;
Copy

Kundenspezifische Rolle zum Verwalten von Aufgaben

Erstellen Sie eine kundenspezifische Rolle, erteilen Sie ihr die Berechtigung EXECUTE TASK und erteilen Sie diese kundenspezifische Rolle dann einer beliebigen Aufgabeneigentümerrolle, um die Änderung 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;
Copy

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;
Copy

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;
Copy

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:

Aufgabenfunktionen

Um das Abrufen von Informationen über Aufgaben zu unterstützen, bietet Snowflake die folgenden Funktionen: