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¶
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 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.
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.
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;
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),),
),
)
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;
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=Cron("0 * * * *", "America/Los_Angeles"),
target_completion_interval=timedelta(minutes=120),
serverless_task_max_statement_size="LARGE",
),
)
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;
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 0 * * *", "UTC"),
target_completion_interval=timedelta(minutes=180),
serverless_task_min_statement_size="MEDIUM",
serverless_task_max_statement_size="LARGE",
),
)
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;
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_T4",
definition="SELECT 1",
schedule=timedelta(seconds=10),
serverless_task_max_statement_size="LARGE",
),
)
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;
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;
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;
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;
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 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>') ) );
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 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.
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.';
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, 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;
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.
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:
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: