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¶
Tabellenschemaentwicklung wird von Aufgaben nicht unterstützt.
Überblick über den Workflow zur Aufgabenerstellung¶
Erstellen Sie eine Aufgabenadministratorrolle, mit der die Befehle in den folgenden Schritten ausgeführt werden können.
Definieren Sie eine neue Aufgabe mit CREATE TASK.
Testen Sie Aufgaben manuell mit EXECUTE TASK.
Lassen Sie die Aufgabe kontinuierlich laufen, indem Sie ALTER TASK. .. RESUME verwenden.
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: Snowflake sagt die benötigten Ressourcen vorher und weist sie automatisch zu.
Vom Benutzer verwaltetes virtuelles Warehouse-Modell: Sie verwalten die Computeressourcen über ein virtuelles Warehouse.
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;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T1",
definition="SELECT 1",
schedule=timedelta(minutes=60),
),
)
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;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T2",
definition="SELECT 1",
schedule=timedelta(seconds=30),
serverless_task_min_statement_size="SMALL",
serverless_task_max_statement_size="LARGE",
),
)
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;
from datetime import timedelta
from snowflake.core.task import Cron, Task
tasks = root.databases["TEST_DB"].schemas["TEST_SCHEMA"].tasks
task = tasks.create(
Task(
name="SCHEDULED_T3",
definition="SELECT 1",
schedule=Cron("0 * * * *", "America/Los_Angeles"),
target_completion_interval=timedelta(minutes=120),
serverless_task_max_statement_size="LARGE",
user_task_timeout_ms=10800000, # (3 hours)
suspend_task_after_num_failures=3,
),
)
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;
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;
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;
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;
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;
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);
ALTER TASK my_task
SET USER_TASK_TIMEOUT_MS = 10000 -- Changes maximum runtime to 10 seconds
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>') ) );
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;
Ü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 |
|
Rollen mit erforderlichen Berechtigungen |
---|---|---|---|
ACCOUNT_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle |
|
ACCOUNT_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle |
|
ORGANIZATION_USAGE |
SERVERLESS_TASK |
ACCOUNTADMIN-Rolle USAGE_VIEWER-Datenbankrolle |
|
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;
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;
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.
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.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
Als Beispiel für eine Rolle, die serverlose Aufgaben erstellen kann, erstellen Sie eine kundenspezifische Rolle namens serverless_task_creation
und weisen der Rolle die Berechtigung CREATE TASK sowie auf Kontoebene die Berechtigung EXECUTE MANAGED TASK zu.
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
Kundenspezifische Rolle zum Verwalten von Aufgaben¶
Erstellen Sie eine kundenspezifische Rolle, 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;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
Setzen Sie die aktive Rolle auf ACCOUNTADMIN, bevor Sie der neuen Rolle die Berechtigungen auf Kontoebene erteilen.
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
Setzen Sie die aktive Rolle auf SECURITYADMIN, um zu zeigen, dass diese Rolle einer anderen Rolle eine Rolle zuweisen kann.
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
Weitere Informationen zum Erstellen von kundenspezifischen Rollen und Rollenhierarchien finden Sie unter Konfigurieren der Zugriffssteuerung.
Aufgabeneigentümerrolle löschen¶
Wenn Sie die Eigentümerrolle einer Aufgabe löschen, geht die Eigentümerschaft der Aufgabe an die Rolle über, die die Eigentümerrolle gelöscht hat. Wenn die Eigentümerschaft einer Aufgabe wechselt, wird die Aufgabe automatisch angehalten, und neue Ausführungen werden erst geplant, wenn der neue Eigentümer die Aufgabe fortsetzt.
Wenn Sie die Rolle löschen, während die Aufgabe ausgeführt wird, wird die Aufgabenausführung unter der gelöschten Rolle abgeschlossen.
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.
Beispiele: Den Dienstbenutzer und die Teamrolle einrichten¶
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;
Erstellen Sie eine Aufgabenrolle, und weisen Sie diese dann dem Dienstbenutzer zu:
CREATE ROLE task_role; GRANT ROLE task_role to USER task_user;
Erlauben Sie der Aufgabenrolle, Abfragen im Namen der Teambenutzerrolle auszuführen:
GRANT IMPERSONATE ON USER task_user TO ROLE task_role;
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;
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;
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.
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;
Erstellen Sie eine Aufgabe mit der neuen Rolle:
USE ROLE janes_role; CREATE TASK janes_task SCHEDULE='60 M' AS SELECT 1;
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;
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;
Ü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%';
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:
DatabaseRoleResource-Methoden:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
RoleResource (Kontorolle) Methoden:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
UserResource-Methoden:
grant_role
iter_grants_to
revoke_role
Aufgabenfunktionen¶
Um das Abrufen von Informationen über Aufgaben zu unterstützen, bietet Snowflake die folgenden Funktionen:
Weitere Python-Beispiele¶
Weitere Python-Beispiele finden Sie unter Verwalten von Snowflake-Aufgaben und Task-Graphen mit Python.