Einführung in Aufgaben

Aufgaben sind eine leistungsstarke Möglichkeit, die Datenverarbeitung zu automatisieren und Geschäftsabläufe in Ihrer Datenpipeline zu optimieren.

Aufgaben können zu geplanten Zeiten ausgeführt werden oder durch Ereignisse ausgelöst werden, z. B. wenn neue Daten in einem Stream eintreffen.

Aufgaben können SQL-Befehle und gespeicherte Prozeduren ausführen, die unterstützte Sprachen und Tools, einschließlich JavaScript, Python, Java, Scala und Snowflake Scripting verwenden.

Für komplexe Arbeitsabläufe können Sie Sequenzen von Aufgaben erstellen, die Task-Graphen genannt werden. Task-Graphen können eine Logik verwenden, um dynamisches Verhalten auszuführen und Aufgaben parallel oder nacheinander auszuführen.

Unter diesem Thema:

Einschränkungen

Ü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 definieren

Aufgaben benötigen Computeressourcen, um Anweisungen und Prozeduren auszuführen. Sie können zwischen den folgenden beiden Modellen wählen:

Serverlose Aufgaben

Bei diesem Modell legen Sie fest, wann die Aufgabe ausgeführt werden soll, und Snowflake prognostiziert die für die Erledigung der Aufgabe in dieser Zeit erforderlichen Computeressourcen und weist diese zu. Die Vorhersage basiert auf einer dynamischen Analyse der letzten Ausführungen derselben Aufgabe.

Einschränkungen

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

Erstellen Sie eine Aufgabe mit dem serverlosen Berechnungsmodell

Verwenden Sie CREATE TASK, um die Aufgabe zu definieren. Fügen Sie nicht den Parameter WAREHOUSE hinzu.

Die Rolle, die die Aufgabe ausführt, muss über die globale EXECUTE MANAGED TASK-Berechtigung verfügen. Weitere Informationen dazu finden Sie unter Aufgabensicherheit.

Im folgenden Beispiel wird eine Aufgabe erstellt, die jede Stunde ausgeführt wird.

CREATE TASK SCHEDULED_T1
  SCHEDULE='60 MINUTES'
  AS SELECT 1;
Copy
Diagramm zur Veranschaulichung des Rechenmodells für serverlose Aufgaben.

Kosten und Leistung: Warehouse-Größen

Um sicherzustellen, dass serverlose Aufgaben effizient ausgeführt werden, können Sie ein Minimum und ein Maximum von Warehouse-Größen festlegen, indem Sie die folgenden Parameter einstellen:

  • SERVERLESS_TASK_MIN_STATEMENT_SIZE: die minimale Warehouse-Größe für vorhersehbare Leistung (Standard: XSMALL).

  • SERVERLESS_TASK_MAX_STATEMENT_SIZE: die maximale Warehouse-Größe, um unerwartete Kosten zu vermeiden (Standard: XXLARGE).

Nachdem eine Aufgabe abgeschlossen ist, überprüft Snowflake die Leistung und passt die Computeressourcen für künftige Ausführungen innerhalb dieser Limits an.

Das folgende Beispiel zeigt eine Aufgabe, die alle 30 Sekunden ausgeführt wird, mit einer Mindestgröße des Warehouses von SMALL und einer maximalen Warehouse-Größe von LARGE.

CREATE TASK SCHEDULED_T2
  SCHEDULE='30 SECONDS'
  SERVERLESS_TASK_MIN_STATEMENT_SIZE='SMALL'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  AS SELECT 1;
Copy

Ziel-Abschlussintervall

Sie können ein früheres Ziel für die Fertigstellung einer serverlosen Aufgabe festlegen. Für serverlose getriggerte Aufgaben ist ein Ziel-Abschlussintervall erforderlich.

Wenn diese Einstellung vorgenommen wird, schätzt und skaliert Snowflake die Ressourcen, die innerhalb des Ziel-Abschlussintervalls abgeschlossen sein müssen. Wenn eine Aufgabe bereits ihre maximale Warehouse-Größe erreicht hat und zu lange ausgeführt wird, wird das Ziel-Abschlussintervall ignoriert.

Im folgenden Beispiel wird eine Aufgabe jeden Tag um Mitternacht mit dem Ziel bis 2 Uhr nachts ausgeführt. Die Startzeit und die Zeitzone werden durch USING CRON definiert. Wenn die Aufgabe die größte Warehouse-Größe erreicht, kann sie bis zu drei Stunden lang ausgeführt werden, bevor sie schließlich ein Timeout auslöst.

CREATE TASK SCHEDULED_T3
  SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
  TARGET_COMPLETION_INTERVAL='120 MINUTE'
  SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
  USER_TASK_TIMEOUT_MS = 10800000         -- (3 hours)
  SUSPEND_TASK_AFTER_NUM_FAILURES = 3
  AS SELECT 1;
Copy
Abbildung einer serverlosen Aufgabe, die täglich zwischen Mitternacht und 2 Uhr nachts geplant ist.

Vom Benutzer verwaltetes virtuelles Warehouse-Modell

Bei diesem Modell haben Sie die volle Kontrolle über die für jede Arbeitslast verwendeten Computeressourcen.

Warehouse auswählen

Beachten Sie bei der Auswahl eines Warehouses Folgendes:

  • Informieren Sie sich über die Best Practices unter Hinweise zu Warehouses.

  • Analysieren Sie die durchschnittlichen Ausführungszeiten von Aufgaben mit verschiedenen Warehouses, basierend auf der Warehouse-Größe und dem Clustering. Weitere Informationen dazu finden Sie unter Dauer der Aufgabe.

  • Wenn das Warehouse von mehreren Prozessen gemeinsam genutzt wird, sollten Sie die Auswirkungen der Aufgabe auf andere Workloads berücksichtigen.

Eine Aufgabe mit dem benutzerverwalteten Computemodell erstellen

Verwenden Sie CREATE TASK, und schließen Sie den Parameter WAREHOUSE ein.

Die Rolle, die die Aufgabe ausführt, muss über die globale EXECUTE MANAGED TASK-Berechtigung verfügen. Weitere Informationen dazu finden Sie unter Aufgabensicherheit.

Im folgenden Beispiel wird eine Aufgabe erstellt, die jede Stunde ausgeführt wird.

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

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. Es ist aber nicht sichergestellt, 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.

Wenn eine Aufgabe erstellt wird, beginnt sie mit dem Status „Angehalten“. Um es einer Aufgabe zu ermöglichen, einem Zeitplan zu folgen oder Ereignisse kontinuierlich zu erkennen, verwenden Sie ALTER TASK … RESUME. Um die Aufgabe einmalig auszuführen, verwenden Sie EXECUTE TASK.

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 indem Sie die Aufgabe in Snowsight unter Verwendung des Parameters SCHEDULE bearbeiten.

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

Im folgenden Beispiel wird eine Aufgabe erstellt, die jeden Sonntag um 3:00 Uhr ausgeführt wird, wobei die Zeitzone „Americas/Los_Angeles“ verwendet 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

Um Aufgaben auszuführen, wenn ein definierter Stream über neue Daten verfügt, verwenden Sie Getriggerte Aufgaben. Dieser Ansatz ist nützlich für Extract, Load, Transform (ELT)-Workflows (Extrahieren, Laden, Transformieren), da dadurch das häufige Abfragen der Quelle entfällt, wenn das Eintreffen neuer Daten unvorhersehbar ist. Außerdem wird die Latenzzeit verringert, indem 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. Der folgende Code erstellt zum Beispiel eine Aufgabe, die jede Stunde einen Stream auf neue Daten überprüft:

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

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 Beginn einer Aufgabe und dem Zeitpunkt, zu dem sie abgeschlossen ist. Diese Dauer umfasst die beiden folgenden Elemente:

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

  • Ausführungszeit: Die Zeit, die die Aufgabe für die Ausführung der dazugehörigen SQL-Anweisungen oder anderer Vorgänge benötigt. Um die Ausführungszeit zu berechnen, fragen Sie Ansicht TASK_HISTORY ab, und vergleichen Sie QUERY_START_TIME mit COMPLETED_TIME.

Die folgende Abbildung zeigt beispielsweise eine serverlose Aufgabe, die alle 15 Sekunden ausgeführt werden soll. Die Gesamtdauer dieser Aufgabenausführung beträgt 12 Sekunden, was 5 Sekunden Wartezeit und 7 Sekunden Ausführungszeit einschließt.

Abbildung einer Aufgabe, einschließlich 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 STATEMENT_TIMEOUT_IN_SECONDS und USER_TASK_TIMEOUT_MS festgelegt 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 Aufgaben auszuführen, müssen Sie über die korrekten 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, weisen Sie dieser die Berechtigung EXECUTE TASK zu, 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;
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.

Aufgaben, die von einem Systemdienst ausgeführt werden

Standardmäßig werden Aufgaben als Systemdienst ausgeführt, der von einem Benutzer entkoppelt ist.

Der Systemdienst führt die Aufgabe mit denselben Berechtigungen aus wie der Aufgabeneigentümer.

Dadurch werden Komplikationen im Zusammenhang mit der Benutzerverwaltung vermieden: Wenn ein Benutzer z. B. gelöscht oder aufgrund von Authentifizierungsproblemen gesperrt wird oder wenn Rollen entfernt werden, wird die Aufgabe ohne Unterbrechung weiter ausgeführt.

Der Abfrageverlauf von Aufgabenausführungen ist mit dem Systemdienst verbunden. Es gibt 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 mit Benutzerberechtigungen ausführen

Aufgaben können so konfiguriert werden, dass sie mit den Berechtigungen eines bestimmten Benutzers ausgeführt werden, zusätzlich zu den Berechtigungen der Rolle des Aufgabeneigentümers. Aufgaben, die EXECUTE AS USER angeben, werden im Namen des benannten Benutzers und nicht im Systemdienst ausgeführt.

  • Berechtigungen mit mehreren Rollen verwalten: In Situationen, in denen Benutzer Sekundärrollen haben, können Benutzer eine Aufgabe mit den kombinierten Berechtigungen ihrer Primär- und Sekundärrollen ausführen. Diese Konfiguration stellt sicher, dass die Aufgabe über die erforderlichen Berechtigungen für den Zugriff auf alle erforderlichen Ressourcen verfügt.

  • Nutzung der benutzerbasierten Datenmaskierung und der Zeilenzugriffsrichtlinien: In Situationen, in denen Data Governance-Richtlinien den abfragenden Benutzer berücksichtigen, stellt die Ausführung einer Aufgabe als Benutzer sicher, dass die Aufgabe mit den geltenden Richtlinien kompatibel ist.

  • Ressourcenverfügbarkeit für alle Vorgänge: Alle Instanzen einer Aufgabe, die mit EXECUTE AS USER ausgeführt werden, werden dem konfigurierten Benutzer anstelle des SYSTEM-Benutzers zugeordnet. Diese Zuordnung hilft, einen klaren Prüfpfad für alle Vorgänge zu erhalten.

Zugriffssteuerung

Die Eigentümerrolle der Aufgabe muss die IMPERSONATE-Berechtigung für den durch EXECUTE AS USER angegebenen Benutzer haben, und dem angegebenen Benutzer muss die Eigentümerrolle der Aufgabe zugewiesen sein.

Wenn die Aufgabe ausgeführt wird, wird die Primärrolle der Aufgabensitzung zur Eigentümerrolle der Aufgabe, und die Standard-Sekundärrollen des Benutzers werden aktiviert. Benutzer können die Primärrollen mit dem Befehl USE ROLE wechseln und die Sekundärrollen in der Aufgabensitzung mit dem Befehl USE SECONDARY ROLES anpassen.

Aufgaben mithilfe eines Dienstbenutzers und einer Dienstrolle freigeben

Für Produktionsumgebungen empfehlen wir Ihnen, einen separaten Dienstbenutzer zu erstellen, der Ihr Team oder Ihren Geschäftsprozess repräsentiert. Im Gegensatz zur Ausführung als bestehender Dienst- oder Personenbenutzer hilft diese bewährte Methode, den Workflow sicherer zu gestalten:

  • Wenn eine Aufgabe als dedizierter Dienstbenutzer ausgeführt wird, erhält sie nur Zugriff auf die vorgesehenen Berechtigungen. Wenn sich ein Benutzer stattdessen als ein anderer Benutzer ausgibt, erhält er Zugriff auf alle Berechtigungen, die dem anderen Benutzer zugeordnet sind, einschließlich unbeabsichtigter Berechtigungen, einschließlich Benutzerberechtigungen, die nach dem Erstellen und Fortsetzen der Aufgabe erteilt wurden.

  • Eine Aufgabe, die als Benutzer ausgeführt wird, kann unterbrochen werden, wenn die Person die Abteilung oder die Organisation verlässt.

Beispiele: Den Dienstbenutzer und die Teamrolle einrichten

  1. Richten Sie mit der Administratorrolle einen Dienstbenutzer ein, der für die Aufgabe verwendet werden soll.

    Im folgenden Beispiel wird ein Dienstbenutzer mit dem Namen task_user erstellt:

    USE ROLE ACCOUNTADMIN;
    CREATE USER task_user;
    
    Copy
  2. Erstellen Sie eine Aufgabenrolle, und weisen Sie diese dann dem Dienstbenutzer zu:

    CREATE ROLE task_role;
    GRANT ROLE task_role to USER task_user;
    
    Copy
  3. Erlauben Sie der Aufgabenrolle, Abfragen im Namen der Teambenutzerrolle auszuführen:

    GRANT IMPERSONATE ON USER task_user TO ROLE task_role;
    
    Copy
  4. Erteilen Sie der Aufgabenrolle die entsprechenden Berechtigungen.

    USE ROLE ACCOUNTADMIN;
    
    -- Grant the team role the privileges to create tasks in a specific schema
    GRANT CREATE TASK
      ON SCHEMA schema1
      TO ROLE task_role;
    
    -- Grant the team role the privileges to use a specific warehouse
    GRANT USAGE
      ON WAREHOUSE warehouse1
      TO ROLE task_role;
    
    -- Grant the team role the privileges to run tasks on a serverless compute model
    GRANT EXECUTE MANAGED TASK ON ACCOUNT TO ROLE task_role;
    
    Copy

Eine Aufgabe im Namen eines Dienstbenutzers ausführen

Nachdem die Teamrolle die Eigentümerschaft für die Aufgabe hat, können die Teammitglieder die Aufgabe ändern und sie im Namen des Dienstbenutzers ausführen.

Beispiel:

USE ROLE task_owner;

CREATE TASK team_task
  SCHEDULE='12 HOURS'
  EXECUTE AS USER task_user
  AS SELECT 1;
Copy

Im vorherigen Beispiel würden die resultierenden Protokolle zeigen, dass task_user die Aufgabe geändert hat.

(Nur zum Testen) Einem Benutzer erlauben, sich direkt als ein anderer Benutzer auszugeben

Wenn Sie Tests oder Prototypenänderungen durchführen, können Sie als Administrator Benutzern erlauben, sich direkt als ein anderer Benutzer auszugeben. Dieses Szenario wird zwar unterstützt, wird aber in einer Produktionsumgebung nicht empfohlen.

  1. Richten Sie eine Rolle für den Identitätswechsel ein:

    USE ROLE ACCOUNTADMIN;
    CREATE ROLE janes_role;
    GRANT ROLE janes_role to USER jane;
    GRANT IMPERSONATE ON USER jane TO ROLE janes_role;
    
    Copy
  2. Erstellen Sie eine Aufgabe mit der neuen Rolle:

    USE ROLE janes_role;
    
    CREATE TASK janes_task
      SCHEDULE='60 M' AS SELECT 1;
    
    Copy
  3. Weisen Sie die Rolle einem anderen Benutzer zu.

    Im folgenden Beispiel gewährt die Benutzerin Jane dem Benutzer Billy Zugriff:

    --Logged in as Jane or account admin
    GRANT ROLE janes_role to USER billy;
    
    Copy
  4. Der andere Benutzer ändert die Aufgabe.

    Im folgenden Beispiel ändert der Benutzer Billy die Aufgabe:

    -- Logged in as billy
    USE ROLE janes_role;
    
    ALTER TASK janes_task
      SET EXECUTE AS USER jane;
    
    Copy
  5. Überprüfen Sie die Protokolle.

    Der Befehl SHOW GRANTS TO ROLE würde zeigen, dass Jane die Rolle an Billy vergeben hat. Die Ansicht QUERY_HISTORY würde dann zeigen, dass Billy die Aufgabe geändert hat. Zukünftige Aufgabenausführungen würden immer noch als von Jane ausgeführt angezeigt.

    USE ROLE ACCOUNTADMIN;
    
    SHOW GRANTS TO ROLE janes_role;
    
    QUERY_HISTORY()
      WHERE QUERY_TEXT ILIKE '%janes_task%';
    
    Copy

Data Definition Language (DDL, Datendefinitionssprache)-Vorgänge der Aufgabe

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:

Weitere Python-Beispiele

Weitere Python-Beispiele finden Sie unter Verwalten von Snowflake-Aufgaben und Task-Graphen mit Python.