Einrichten von Alerts auf Grundlage von Daten in Snowflake

Unter diesem Thema wird erklärt, wie Sie einen Alert einrichten, der auf Basis der Daten in Snowflake unter bestimmten Bedingungen regelmäßig eine Aktion ausführt.

Einführung

In Fällen, in denen Daten in Snowflake bestimmte Bedingungen erfüllen, möchten Sie möglicherweise benachrichtigt werden oder Maßnahmen ergreifen. Sie könnten beispielweise in folgenden Fällen eine Benachrichtigung erhalten:

  • Die Credit-Nutzung eines Warehouses erhöht sich um einen angegebenen Prozentsatz Ihres aktuellen Kontingents.

  • Der Ressourcenverbrauch Ihrer Pipelines, Aufgaben, materialisierten Ansichten usw. übersteigt einen bestimmten Wert.

  • Ihre Daten entsprechen nicht einer bestimmten, von Ihnen eingerichteten Geschäftsregel.

Zu diesem Zweck können Sie einen Snowflake Alert einrichten. Ein Snowflake Alert ist ein Objekt auf Schemaebene, das Folgendes angibt:

  • Eine Bedingung, die den Alert auslöst (z. B. das Vorhandensein von Abfragen, die länger als eine Sekunde dauern, bis sie abgeschlossen sind).

  • Die Aktion, die ausgeführt werden soll, wenn die Bedingung erfüllt ist (z. B. Senden einer E-Mail-Benachrichtigung, Erfassen einiger Daten in einer Tabelle usw.).

  • Wann und wie oft die Bedingung ausgewertet werden soll (z. B. alle 24 Stunden, jeden Sonntag um Mitternacht usw.).

Angenommen, Sie möchten eine E-Mail-Benachrichtigung senden, wenn der Credit-Verbrauch eines Warehouses ein bestimmtes Limit überschreitet. Angenommen, Sie möchten dies alle 30 Minuten überprüfen. Sie können einen Alert mit den folgenden Eigenschaften erstellen:

  • Bedingung: Der Credit-Verbrauch für ein Warehouse (die Summe der Spalte credits_used in der Ansicht WAREHOUSE_METERING_HISTORY des Schemas ACCOUNT_USAGE) überschreitet einen bestimmten Grenzwert.

  • Aktion: E-Mail an den Administrator senden.

  • Häufigkeit/Zeitplan: Alle 30 Minuten diese Bedingung prüfen.

Auswahl des Benachrichtigungstyps

Sie können die folgenden Benachrichtigungstypen erstellen:

  • Benachrichtigung nach Zeitplan: Snowflake wertet die Bedingung anhand der vorhandenen Daten nach Plan aus.

    Sie können z. B. eine Benachrichtigung nach Zeitplan einrichten, um zu prüfen, ob eine der vorhandenen Zeilen in einer Tabelle einen Spaltenwert hat, der einen bestimmten Betrag überschreitet.

  • Benachrichtigung über neue Daten: Snowflake wertet die Bedingung anhand aller neuen Zeilen in einer bestimmten Tabelle oder Ansicht aus.

    Sie können zum Beispiel eine Benachrichtigung über neue Daten einrichten, die Sie darauf hinweist, wenn neue Zeilen für Fehlermeldungen in die Ereignistabelle für Ihr Konto eingefügt werden. Da Aktualisierungen dynamischer Tabellen und Aufgabenausführungen Ereignisse in der Ereignistabelle protokollieren, können Sie eine Benachrichtigung über neue Daten einrichten:

Benachrichtigungen nach Zeitplan

Mit einer Benachrichtigung nach Zeitplan können Sie eine Benachrichtigung so einrichten, dass sie alle n Minuten oder nach einem durch einen Cron-Ausdruck festgelegten Zeitplan ausgeführt wird.

Die Bedingung der Benachrichtigung wird für alle Daten ausgewertet (im Gegensatz zu Benachrichtigungen über neue Daten, bei denen die Bedingungen nur für die neu eingefügten Zeilen ausgewertet werden).

Benachrichtigungen über neue Daten

Mit einer Benachrichtigung über neue Daten können Sie eine Benachrichtigung einrichten, die nur ausgeführt wird, wenn neue Zeilen in eine Tabelle eingefügt oder in einer Ansicht verfügbar gemacht werden.

Jedes Mal, wenn neue Zeilen eingefügt werden, wird die Benachrichtigung ausgeführt, wobei die Bedingung nur für die neuen Zeilen ausgewertet wird und die Aktion ausgeführt wird, wenn die Bedingung den Wert TRUE ergibt.

Wenn Sie eine Bedingung für neu eingefügte Zeilen auswerten möchten, verwenden Sie eine Benachrichtigung über neue Daten, anstatt eine Benachrichtigung nach Zeitplan einzurichten (die nach einem festen Zeitplan ausgeführt wird, unabhängig davon, ob Daten hinzugefügt wurden oder nicht).

Da die Benachrichtigung nur für neu eingefügte Zeilen in einer Tabelle oder Ansicht gilt, gibt es Einschränkungen für die Bedingung, die Sie angeben können:

Bemerkung

Sie können den Befehl EXECUTE ALERT nicht verwenden, um eine Benachrichtigung über neue Daten auszuführen.

Warehouses für Alerts wählen

Ein Alert erfordert ein Warehouse zur Ausführung. Sie können entweder das serverlose Computemodell oder ein virtuelles Warehouse, das Sie spezifizieren, verwenden.

Verwendung des serverlosen Computemodells (serverlose Alerts)

Alerts, die das serverlose Computemodell verwenden, werden serverlose Alerts genannt. Wenn Sie das serverlose Computemodell verwenden, passt Snowflake automatisch die Größe der für den Alert erforderlichen Computeressourcen an und skaliert sie. Snowflake bestimmt die ideale Größe der Computeressourcen für eine bestimmte Ausführung auf der Grundlage einer dynamischen Analyse der Statistiken zur letzten Ausführungen desselben Alerts. Die maximale Größe für die Ausführung eines serverlosen Alerts entspricht einem XXLARGE-Warehouse. Mehrere Workloads in Ihrem Konto teilen sich einen gemeinsamen Satz von Computeressourcen.

Die Abrechnung erfolgt ähnlich wie bei anderen serverlosen Features (z. B. serverlosen Aufgaben). Siehe Erläuterungen zu den Kosten von Alerts.

Bemerkung

Wenn Sie eine Benachrichtigung über neue Daten erstellen, die nur selten hinzugefügt wird, sollten Sie diese als serverlose Benachrichtigung konfigurieren. Wenn Sie die Benachrichtigung so konfigurieren, dass stattdessen ein Warehouse verwendet wird, verursacht selbst eine einfache Aktion, die eine E-Mail-Benachrichtigung versendet, mindestens eine Minute Warehouse-Kosten.

Verwenden eines virtuellen Warehouses, das Sie spezifizieren

Wenn Sie ein virtuelles Warehouse angeben möchten, müssen Sie ein Warehouse wählen, das für die SQL-Aktionen, die durch den Alert ausgeführt werden, angemessen dimensioniert ist. Richtlinien für die Auswahl eines Warehouses finden Sie unter Hinweise zu Warehouses.

Erläuterungen zu den Kosten von Alerts

Die Kosten, die mit der Ausführung eines Alerts zur Ausführung von SQL-Code verbunden sind, hängen von den für den Alert verwendeten Computeressourcen ab:

  • Bei serverlosen Alerts rechnet Snowflake Ihr Konto auf der Grundlage der Nutzung von Computeressourcen ab. Die Gebühren werden auf Basis der Gesamtnutzung der Ressourcen (einschließlich der Clouddienstnutzung) berechnet und in Computestunden (Compute-Hours) der Credit-Nutzung gemessen. 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.

    Weitere Informationen zur Anzahl der von Benachrichtigungen verbrauchten Credits finden Sie in der in der „Serverless Feature Credit Table“ unter Snowflake Service Consumption Table.

    Um den Nutzungsverlauf von serverlosen Benachrichtigungen anzuzeigen, können Sie:

  • Bei Alarmen, die ein von Ihnen angegebenes virtuelles Warehouse verwenden, stellt Snowflake Ihrem Konto die Credit-Nutzung in Rechnung basierend auf der Warehouse-Nutzung, wenn ein Alert ausgeführt wird. Dies ist vergleichbar mit der Verwendung des Warehouses für die Ausführung der gleichen SQL-Anweisungen in einem Client oder in Snowsight. 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 Alert-Workloads anzupassen.

Tipp

Wenn Sie eine Benachrichtigung einrichten möchten, die neue zu einer Tabelle oder Ansicht hinzugefügte Zeilen auswertet, verwenden Sie eine Benachrichtigung über neue Daten und nicht eine Benachrichtigung nach Zeitplan. Eine Benachrichtigung nach Zeitplan wird zu einem geplanten Zeitpunkt ausgeführt, unabhängig davon, ob neue Zeilen eingefügt wurden oder nicht.

Erteilen von Berechtigungen zum Erstellen von Alerts

Zum Erstellen eines Alerts benötigen Sie eine Rolle, die über die folgenden Berechtigungen verfügt:

  • Die Berechtigung EXECUTE ALERT für das Konto.

    Bemerkung

    Diese Berechtigung kann nur von einem Benutzer mit der Rolle ACCOUNTADMIN erteilt werden.

  • Eine der folgenden Berechtigungen:

    • Die Berechtigung EXECUTE MANAGED ALERT für das Konto, wenn Sie einen serverlosen Alert erstellen.

    • Die Berechtigung USAGE für das Warehouse, das zur Ausführung des Alerts verwendet wird, wenn Sie ein virtuelles Warehouse für den Alert angeben.

  • Die Berechtigungen USAGE und CREATE ALERT für das Schema, in dem der Alert erstellt werden soll.

  • Die Berechtigung USAGE für die Datenbank, in der sich das Schema befindet.

  • Die Berechtigung SELECT für die Tabelle oder Ansicht, die Sie in der Benachrichtigungsbedingung abfragen möchten (wenn Sie eine Benachrichtigung über neue Daten erstellen).

Um diese Berechtigungen einer Rolle zuzuweisen, verwenden Sie den Befehl GRANT <Berechtigungen> … TO ROLE.

Angenommen, Sie möchten eine kundenspezifische Rolle mit dem Namen my_alert_role erstellen, die über die Berechtigung verfügt, einen Alert im Schema my_schema zu erstellen. Sie möchten, dass der Alert das Warehouse my_warehouse verwendet.

Gehen Sie dabei wie folgt vor:

  1. Ein Benutzer mit der Rolle ACCOUNTADMIN führt Folgendes aus:

    1. Kundenspezifische Rolle erstellen

      Beispiel:

      USE ROLE ACCOUNTADMIN;
      
      CREATE ROLE my_alert_role;
      
      Copy
    2. Kundenspezifischer Rolle die globale Berechtigung EXECUTE ALERT zuweisen

      Beispiel:

      GRANT EXECUTE ALERT ON ACCOUNT TO ROLE my_alert_role;
      
      Copy
    3. Wenn Sie einen serverlosen Alert erstellen möchten, erteilen Sie dieser benutzerdefinierten Rolle die globale Berechtigung EXECUTE MANAGED ALERT.

      Beispiel:

      GRANT EXECUTE MANAGED ALERT ON ACCOUNT TO ROLE my_alert_role;
      
      Copy
    4. Kundenspezifische Rolle einem Benutzer zuweisen

      Beispiel:

      GRANT ROLE my_alert_role TO USER my_user;
      
      Copy
  2. Die Eigentümer von Datenbank, Schemas und Warehouses erteilen der kundenspezifischen Rolle die für das Erstellen des Alerts erforderlichen Berechtigungen:

    • Der Eigentümer des Schemas muss die Berechtigungen CREATE ALERT und USAGE für das Schema erteilen:

      GRANT CREATE ALERT ON SCHEMA my_schema TO ROLE my_alert_role;
      GRANT USAGE ON SCHEMA my_schema TO ROLE my_alert_role;
      
      Copy
    • Der Eigentümer der Datenbank muss die Berechtigung USAGE für die Datenbank erteilen:

      GRANT USAGE ON DATABASE my_database TO ROLE my_alert_role;
      
      Copy
    • Wenn Sie ein Warehouse für den Alert angeben möchten, muss der Eigentümer dieses Warehouses die Berechtigung USAGE für das Warehouse erteilen:

      GRANT USAGE ON WAREHOUSE my_warehouse TO ROLE my_alert_role;
      
      Copy

Erstellen eines Alerts

In den folgenden Abschnitten finden Sie die grundlegenden Schritte und ein Beispiel für die Erstellung verschiedener Benachrichtigungstypen:

Benachrichtigung nach Zeitplan erstellen

Angenommen, dass immer dann, wenn in einer oder mehreren Zeilen einer Tabelle gauge der Wert in der Spalte gauge_value 200 überschreitet, der aktuelle Zeitstempel in eine Tabelle mit dem Namen gauge_value_exceeded_history eingefügt werden soll.

Sie können einen Alert mit folgenden Merkmalen erstellen:

  • Wertet die Bedingung aus, dass gauge_value größer als 200 ist.

  • Fügt den Zeitstempel in gauge_value_exceeded_history ein, wenn die Auswertung der Bedingung „wahr“ ergibt.

Um einen Alert mit dem Namen my_alert zu erstellen, gehen Sie wie folgt vor:

  1. Überprüfen Sie, ob Sie eine Rolle verwenden, die die Berechtigungen zum Erstellen eines Alerts hat.

    Wenn Sie diese Rolle nicht verwenden, führen Sie den Befehl USE ROLE aus, um diese Rolle zu verwenden.

  2. Vergewissern Sie sich, dass Sie die Datenbank und das Schema verwenden, in der bzw. dem Sie die Benachrichtigung erstellen möchten.

    Wenn Sie diese Datenbank und dieses Schema nicht verwenden, führen Sie die Befehle USE DATABASE und USE SCHEMA aus, um diese Datenbank und dieses Schema zu verwenden.

  3. Führen Sie den Befehl CREATE ALERT aus, um den Alert zu erstellen:

    CREATE OR REPLACE ALERT my_alert
      WAREHOUSE = mywarehouse
      SCHEDULE = '1 minute'
      IF( EXISTS(
        SELECT gauge_value FROM gauge WHERE gauge_value>200))
      THEN
        INSERT INTO gauge_value_exceeded_history VALUES (current_timestamp());
    
    Copy

    Wenn Sie eine serverlose Benachrichtigung erstellen möchten, lassen Sie den Parameter WAREHOUSE weg:

    CREATE OR REPLACE ALERT my_alert
      SCHEDULE = '1 minute'
      IF( EXISTS(
        SELECT gauge_value FROM gauge WHERE gauge_value>200))
      THEN
        INSERT INTO gauge_value_exceeded_history VALUES (current_timestamp());
    
    Copy

    Eine vollständige Beschreibung des Befehls CREATE ALERT finden Sie unter CREATE ALERT.

    Bemerkung

    Wenn Sie einen Alert erstellen, wird dieser standardmäßig auf „Unterbrochen“ gesetzt. Sie müssen den neu erstellten Alert fortsetzen, damit der Alert ausgeführt werden kann.

  4. Aktivieren Sie den Alert, indem Sie den Befehl ALTER ALERT … RESUME ausführen. Beispiel:

    ALTER ALERT my_alert RESUME;
    
    Copy

Benachrichtigung über neue Daten erstellen

Angenommen, Sie möchten eine E-Mail-Benachrichtigung erhalten, wenn eine gespeicherte Prozedur mit dem Namen my_stored_proc in der Datenbank und dem Schema my_db.my_schema eine FATAL-Nachricht in der aktiven Ereignistabelle für Ihr Konto protokolliert.

Um einen Alert mit dem Namen my_alert zu erstellen, gehen Sie wie folgt vor:

  1. Suchen Sie den Namen der aktiven Ereignistabelle für Ihr Konto:

    SHOW PARAMETERS LIKE 'EVENT_TABLE' IN ACCOUNT;
    
    Copy
    +-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------+
    | key         | value                     | default                    | level   | description                             | type   |
    |-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------|
    | EVENT_TABLE | my_db.my_schema.my_events | snowflake.telemetry.events | ACCOUNT | Event destination for the given target. | STRING |
    +-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------+
    
  2. Aktivieren Sie die Änderungsverfolgung für die Tabelle oder Ansicht, die Sie in der Benachrichtigungsbedingung abfragen möchten.

    ALTER TABLE my_db.my_schema.my_events SET CHANGE_TRACKING = TRUE;
    
    Copy
  3. Richten Sie eine Benachrichtigungsintegration für den Versand von E-Mails ein.

  4. Überprüfen Sie, ob Sie eine Rolle verwenden, die die Berechtigungen zum Erstellen eines Alerts hat.

    Wenn Sie diese Rolle nicht verwenden, führen Sie den Befehl USE ROLE aus, um diese Rolle zu verwenden.

  5. Überprüfen Sie, ob Sie die Datenbank und das Schema verwenden, in dem der Alert erstellt werden soll.

    Wenn Sie diese Datenbank und dieses Schema nicht verwenden, führen Sie die Befehle USE DATABASE und USE SCHEMA aus, um diese Datenbank und dieses Schema zu verwenden.

  6. Führen Sie den Befehl CREATE ALERT aus, um die Benachrichtigung zu erstellen, und lassen Sie den Parameter SCHEDULE weg.

    Das folgende Beispiel erstellt beispielsweise eine Benachrichtigung über neue Daten, die die Ereignistabelle auf Fehler bei Aktualisierungen dynamischer Tabellen überwacht und eine Benachrichtigung an einen Slack-Kanal sendet. Das Beispiel setzt Folgendes voraus:

    CREATE OR REPLACE ALERT my_alert
      WAREHOUSE = mywarehouse
      IF( EXISTS(
        SELECT * FROM SNOWFLAKE.TELEMETRY.EVENTS
          WHERE
            resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
            record_type='EVENT' AND
            value:"state"='ERROR'
      ))
      THEN
        BEGIN
          LET result_str VARCHAR;
          (SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
            FROM (
              SELECT resource_attributes:"snow.executable.name"::VARCHAR name
                FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
                LIMIT 10
            )
          );
          CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
            SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
            '{"my_slack_integration": {}}'
          );
        END;
    
    Copy

    Wenn Sie eine serverlose Benachrichtigung erstellen möchten, lassen Sie den Parameter WAREHOUSE weg:

    CREATE OR REPLACE ALERT my_alert
      IF( EXISTS(
        SELECT * FROM SNOWFLAKE.TELEMETRY.EVENTS
          WHERE
            resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
            record_type='EVENT' AND
            value:"state"='ERROR'
      ))
      THEN
        BEGIN
          LET result_str VARCHAR;
          (SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
            FROM (
              SELECT resource_attributes:"snow.executable.name"::VARCHAR name
                FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
                LIMIT 10
            )
          );
          CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
            SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
            '{"my_slack_integration": {}}'
          );
        END;
    
    Copy

    Eine vollständige Beschreibung des Befehls CREATE ALERT finden Sie unter CREATE ALERT.

    Bemerkung

    Wenn Sie einen Alert erstellen, wird dieser standardmäßig auf „Unterbrochen“ gesetzt. Sie müssen den neu erstellten Alert fortsetzen, damit der Alert ausgeführt werden kann.

  7. Aktivieren Sie den Alert, indem Sie den Befehl ALTER ALERT … RESUME ausführen. Beispiel:

    ALTER ALERT my_alert RESUME;
    
    Copy

Angeben von Zeitstempeln auf Grundlage von Alert-Zeitplänen

In einigen Fällen müssen Sie eine Bedingung oder eine Aktion definieren, die auf dem Alert-Zeitplan basiert.

Angenommen, eine Tabelle hat eine Zeitstempelspalte, die angibt, wann eine Zeile hinzugefügt wurde, und Sie möchten einen Alert senden, wenn zwischen dem letzten erfolgreich ausgewerteten Alert und dem aktuell geplanten Alert neue Zeilen hinzugefügt wurden. Mit anderen Worten, Sie möchten Folgendes auswerten:

<now> - <last_execution_of_the_alert>
Copy

Wenn Sie CURRENT_TIMESTAMP und die geplante Zeit des Alerts verwenden, um diesen Zeitbereich zu berechnen, berücksichtigt der berechnete Bereich nicht die Latenz zwischen dem Zeitpunkt, an dem der Alert geplant ist, und dem Zeitpunkt, an dem die Alert-Bedingung tatsächlich ausgewertet wird.

Wenn Sie stattdessen die Zeitstempel des aktuellen Zeitplan-Alerts und des letzten erfolgreich ausgewerteten Alerts benötigen, verwenden Sie die folgenden Funktionen:

  • SCHEDULED_TIME gibt den Zeitstempel zurück, der angibt, wann der aktuelle Alert geplant wurde.

  • LAST_SUCCESSFUL_SCHEDULED_TIME gibt den Zeitstempel zurück, der angibt, wann der letzte erfolgreich ausgewertete Alert geplant wurde.

Diese Funktionen sind im Schema SNOWFLAKE.ALERT definiert. Um diese Funktionen aufzurufen, müssen Sie eine Rolle verwenden, der die Datenbankrolle SNOWFLAKE.ALERT_VIEWER zugewiesen wurde. Um diese Rolle einer anderen Rolle zuzuweisen, verwenden Sie den Befehl GRANT DATABASE ROLE. Um diese Rolle beispielsweise der kundenspezifische Rolle alert_role zuzuweisen, führen Sie Folgendes aus:

GRANT DATABASE ROLE SNOWFLAKE.ALERT_VIEWER TO ROLE alert_role;
Copy

Im folgenden Beispiel wird eine E-Mail-Meldung gesendet, wenn zwischen dem Zeitpunkt, an dem der letzte erfolgreich ausgewertete Alert geplant wurde, und dem Zeitpunkt, an dem der aktuelle Alert geplant wurde, neue Zeilen zu my_table hinzugefügt wurden:

CREATE OR REPLACE ALERT alert_new_rows
  WAREHOUSE = my_warehouse
  SCHEDULE = '1 MINUTE'
  IF (EXISTS (
      SELECT *
      FROM my_table
      WHERE row_timestamp BETWEEN SNOWFLAKE.ALERT.LAST_SUCCESSFUL_SCHEDULED_TIME()
       AND SNOWFLAKE.ALERT.SCHEDULED_TIME()
  ))
  THEN CALL SYSTEM$SEND_EMAIL(...);
Copy

Prüfen der Ergebnisse der SQL-Anweisung für die Bedingung in der Alert-Aktion

Innerhalb der Aktion eines Alerts, wenn Sie die Ergebnisse der SQL-Anweisung auf die Bedingung prüfen müssen:

  1. Rufen Sie die Funktion GET_CONDITION_QUERY_UUID auf, um die Abfrage-ID der SQL-Anweisung für die Bedingung zu erhalten.

  2. Übergeben Sie die Abfrage-ID an die Funktion RESULT_SCAN, um die Ergebnisse der Ausführung dieser SQL-Anweisung zu erhalten.

Beispiel:

CREATE ALERT my_alert
  WAREHOUSE = my_warehouse
  SCHEDULE = '1 MINUTE'
  IF (EXISTS (
    SELECT * FROM my_source_table))
  THEN
    BEGIN
      LET condition_result_set RESULTSET :=
        (SELECT * FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID())));
      ...
    END;
Copy

Manuelles Ausführen von Alerts

In einigen Fällen müssen Sie einen Alert manuell ausführen. Beispiel:

  • Wenn Sie einen neuen Alert erstellen, möchten Sie vielleicht überprüfen, ob der Alert so funktioniert, wie Sie es erwarten.

  • Vielleicht möchten Sie den Alert an einem bestimmten Punkt in Ihrer Datenpipeline ausführen. Zum Beispiel könnten Sie den Alert am Ende eines Aufrufs einer gespeicherten Prozedur ausführen wollen.

Um einen Alert manuell auszuführen, führen Sie den Befehl EXECUTE ALERT aus:

EXECUTE ALERT my_alert;
Copy

Bemerkung

Sie können EXECUTE ALERT nicht verwenden, um eine Benachrichtigung über neue Daten auszuführen.

Der Befehl EXECUTE ALERT löst manuell eine einzelne Ausführung eines Alerts aus, unabhängig von dem für den Alert definierten Zeitplan.

Sie können diesen Befehl interaktiv ausführen. Sie können diesen Befehl auch innerhalb einer gespeicherten Prozedur oder eines Snowflake Scripting-Blocks ausführen.

Weitere Informationen zu den Berechtigungen, die zur Ausführung dieses Befehls erforderlich sind, und zu den Auswirkungen dieses Befehls auf angehaltene, aktive und geplante Alerts finden Sie unter EXECUTE ALERT.

Unterbrechen und Fortsetzen eines Alerts

Wenn Sie verhindern möchten, dass ein Alert vorübergehend ausgeführt wird, können Sie den Alert durch Ausführen des Befehls ALTER ALERT … SUSPEND unterbrechen. Beispiel:

ALTER ALERT my_alert SUSPEND;
Copy

Um einen unterbrochenen Alert fortzusetzen, führen Sie den Befehl ALTER ALERT … RESUME aus. Beispiel:

ALTER ALERT my_alert RESUME;
Copy

Bemerkung

Wenn Sie nicht der Eigentümer des Alerts sind, müssen Sie über die Berechtigung OPERATE für den Alert verfügen, um den Alert zu unterbrechen oder fortzusetzen.

Ändern eines Alerts

Um die Eigenschaften eines Alerts zu ändern, führen Sie den Befehl ALTER ALERT aus.

Bemerkung

  • Sie müssen der Eigentümer des Alerts sein, um die Eigenschaften des Alerts ändern zu können.

  • Sie können eine Benachrichtigung über neue Daten nicht in eine Benachrichtigung nach Zeitplan ändern. Genauso wenig können Sie eine Benachrichtigung nach Zeitplan in eine Benachrichtigung über neue Daten ändern.

Beispiel:

  • Um das Warehouse für den Alert my_alert in my_other_warehouse zu ändern, führen Sie Folgendes aus:

    ALTER ALERT my_alert SET WAREHOUSE = my_other_warehouse;
    
    Copy
  • Um den Zeitplan für den Alert my_alert so zu ändern, dass er alle 2 Minuten ausgewertet wird, führen Sie Folgendes aus:

    ALTER ALERT my_alert SET SCHEDULE = '2 minutes';
    
    Copy
  • Um die Bedingung für den Alert my_alert so zu ändern, dass Sie gewarnt werden, wenn in der Tabelle gauge Zeilen der Spalte gauge_value Werte aufweisen, die größer als 300 sind, führen Sie Folgendes aus:

    ALTER ALERT my_alert MODIFY CONDITION EXISTS (SELECT gauge_value FROM gauge WHERE gauge_value>300);
    
    Copy
  • Um die Aktion für den Alert mit dem Namen my_alert in CALL my_procedure() zu ändern, führen Sie Folgendes aus:

    ALTER ALERT my_alert MODIFY ACTION CALL my_procedure();
    
    Copy

Löschen eines Alerts

Um einen Alert zu löschen, führen Sie den Befehl DROP ALERT aus. Beispiel:

DROP ALERT my_alert;
Copy

Um eine Meldung zu löschen, ohne einen Fehler zu erzeugen, wenn der Alert nicht existiert, führen Sie aus:

DROP ALERT IF EXISTS my_alert;
Copy

Bemerkung

Sie müssen der Eigentümer des Alerts sein, um die den Alert löschen zu können.

Anzeigen von Details zu einem Alert

Um die Alerts aufzulisten, die in einem Konto, einer Datenbank oder einem Schema erstellt wurden, führen Sie den Befehl SHOW ALERTS aus. Um beispielsweise die Alerts aufzulisten, die im aktuellen Schema erstellt wurden, führen Sie den folgenden Befehl aus:

SHOW ALERTS;
Copy

Dieser Befehl listet die Alerts auf, deren Eigentümer Sie sind, und die Alerts, für die Sie die Berechtigung MONITOR oder OPERATE haben.

Um Details zu einem bestimmten Alert anzuzeigen, führen Sie den Befehl DESCRIBE ALERT aus. Beispiel:

DESC ALERT my_alert;
Copy

Bemerkung

Wenn Sie nicht der Eigentümer des Alerts sind, müssen Sie die Berechtigung MONITOR oder OPERATE für den Alert haben, um die Details des Alerts anzeigen zu können.

Klonen eines Alerts

Sie können einen Alert klonen (entweder mit CREATE ALERT … CLONE oder durch Klonen der Datenbank oder des Schemas, das den Alert enthält).

Wenn Sie einen serverlosen Alert klonen, brauchen Sie keine Rolle zu verwenden, die über die globale Berechtigung EXECUTE MANAGED ALERT verfügt. Sie können diese Meldung jedoch erst dann fortsetzen, wenn die Rolle, die Eigentümer des Alerts ist, die Berechtigung EXECUTE MANAGED ALERT erhalten hat.

Überwachen der Ausführung von Alerts

Um die Ausführung der Alerts zu überwachen, können Sie Folgendes tun:

  • Überprüfen Sie die Ergebnisse der Aktion, die für den Alert angegeben wurde. Wenn durch die Aktion beispielsweise Zeilen in eine Tabelle eingefügt werden sollten, können Sie die Tabelle auf neue Zeilen überprüfen.

  • Zeigen Sie den Verlauf der Alert-Ausführungen an, indem Sie eine der folgenden Optionen verwenden:

    • Die Tabellenfunktion ALERT_HISTORY im Schema INFORMATION_SCHEMA.

      Um beispielsweise die Ausführungen von Alerts in der letzten Stunde anzuzeigen, führen Sie die folgende Anweisung aus:

      SELECT *
      FROM
        TABLE(INFORMATION_SCHEMA.ALERT_HISTORY(
          SCHEDULED_TIME_RANGE_START
            =>dateadd('hour',-1,current_timestamp())))
      ORDER BY SCHEDULED_TIME DESC;
      
      Copy
    • Die Ansicht ALERT_HISTORY im Schema ACCOUNT_USAGE der freigegebenen SNOWFLAKE-Datenbank.

Im Abfrageverlauf wird als Name für den Benutzer, der die Abfrage ausgeführt hat, der Wert SYSTEM angezeigt. (Die Alerts werden vom Systemdienst ausgeführt.)

Anzeigen des Abfrageverlaufs eines serverlosen Alerts

Um den Abfrageverlauf eines serverlosen Alerts anzuzeigen, müssen Sie der Eigentümer des Alerts sein oder eine Rolle verwenden, die über die Berechtigung MONITOR oder OPERATE für den Alert selbst verfügt. (Dies unterscheidet sich von Alerts, die eines Ihrer Warehouses verwenden, für die Sie die Berechtigung MONITOR oder OPERATOR für das Warehouse benötigen.)

Angenommen, Sie möchten die Rolle my_alert_role verwenden, wenn Sie den Abfrageverlauf des Alerts my_alert anzeigen. Wenn my_alert_role nicht der Eigentümer von my_alert ist, müssen Sie dieser Rolle die Berechtigung MONITOR oder OPERATE für den Alert erteilen:

GRANT MONITOR ON ALERT my_alert TO ROLE my_alert_role;
Copy

Nachdem der Rolle diese Berechtigung erteilt wurde, können Sie mit der Rolle den Abfrageverlauf des Alerts anzeigen:

USE ROLE my_alert_role;
Copy
SELECT query_text FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
  WHERE query_text LIKE '%Some condition%'
    OR query_text LIKE '%Some action%'
  ORDER BY start_time DESC;
Copy