Überwachung von Ereignistabellen und Warnmeldungen für dynamische Tabellen¶
Unter diesem Thema wird beschrieben, wie Sie eine Ereignistabelle abfragen, die Informationen über Ihren Aktualisierungsstatus liefert, und wie Sie Benachrichtigungen über neue Daten in einer Ereignistabelle einrichten.
Ereignistabelle zur Überwachung von Aktualisierungen abfragen¶
Wenn eine dynamische Tabelle aktualisiert wird, können Sie Snowflake so konfigurieren, dass ein Ereignis aufgezeichnet wird, das Informationen über den Status der Aktualisierungsoperation liefert. Das Ereignis wird in der aktiven Ereignistabelle aufgezeichnet, die mit der dynamischen Tabelle verbunden ist.
Nehmen Sie zum Beispiel an, dass Sie eine Ereignistabelle mit einer Datenbank verknüpft haben. Wenn eine dynamische Tabelle in dieser Datenbank aktualisiert wird, zeichnet Snowflake ein Ereignis in dieser Ereignistabelle auf.
Sie können die in dieser aktiven Ereignistabelle protokollierten Ereignisse abfragen, um die Aktualisierung Ihrer dynamischen Tabellen zu überwachen.
Um beispielsweise den Zeitstempel, den Namen der dynamischen Tabelle, die Abfrage-ID und die Fehlermeldung bei Fehlern mit dynamischen Tabellen in der Datenbank my_db
zu erhalten, gehen Sie wie folgt vor:
SELECT
timestamp,
resource_attributes:"snow.executable.name"::VARCHAR AS dt_name,
resource_attributes:"snow.query.id"::VARCHAR AS query_id,
value:message::VARCHAR AS error
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.database.name" = 'MY_DB' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| TIMESTAMP | DT_NAME | QUERY_ID | ERROR |
|-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------|
| 2025-02-17 21:40:45.444 | MY_DYNAMIC_TABLE | 01ba7614-0107-e56c-0000-a995024f304a | SQL compilation error: |
| | | | Failure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error: |
| | | | Object 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized. |
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
Im folgenden Beispiel werden alle Spalten für Upstream-Fehler mit dynamischen Tabellen im Schema my_schema
abgerufen:
SELECT *
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
value:state = 'UPSTREAM_FAILURE'
ORDER BY timestamp DESC;
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| TIMESTAMP | START_TIMESTAMP | OBSERVED_TIMESTAMP | TRACE | RESOURCE | RESOURCE_ATTRIBUTES | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD | RECORD_ATTRIBUTES | VALUE | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------|
| 2025-02-17 21:40:45.486 | NULL | 2025-02-17 21:40:45.486 | NULL | NULL | { | NULL | NULL | EVENT | { | NULL | { | NULL |
| | | | | | "snow.database.id": 49, | | | | "name": "refresh.status", | | "state": "UPSTREAM_FAILURE" | |
| | | | | | "snow.database.name": "MY_DB", | | | | "severity_text": "WARN" | | } | |
| | | | | | "snow.executable.id": 487426, | | | | } | | | |
| | | | | | "snow.executable.name": "MY_DYNAMIC_TABLE_2", | | | | | | | |
| | | | | | "snow.executable.type": "DYNAMIC_TABLE", | | | | | | | |
| | | | | | "snow.owner.id": 2601, | | | | | | | |
| | | | | | "snow.owner.name": "DATA_ADMIN", | | | | | | | |
| | | | | | "snow.owner.type": "ROLE", | | | | | | | |
| | | | | | "snow.schema.id": 411, | | | | | | | |
| | | | | | "snow.schema.name": "MY_SCHEMA" | | | | | | | |
| | | | | | } | | | | | | | |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
Informationen über die Rolle, die Sie für die Abfrage der Ereignistabelle verwenden müssen, und die Bedingungen, die Sie zum Filtern der Ergebnisse verwenden können, finden Sie unter Benachrichtigung über neue Daten einrichten.
Benachrichtigungen für neue Daten einrichten, um Aktualisierungen zu überwachen¶
Wie bereits erwähnt, wird bei der Aktualisierung einer dynamischen Tabelle ein Ereignis in der Ereignistabelle protokolliert, um anzuzeigen, ob die Aktualisierung erfolgreich war oder nicht. Sie können eine Benachrichtigung über neue Daten einrichten, um die Ereignistabelle zu überwachen. Sie können die Benachrichtigung so konfigurieren, dass eine Benachrichtigung gesendet wird, wenn eine Aktualisierung fehlschlägt.
In den nächsten Abschnitten erfahren Sie, wie Sie die Ereignisprotokollierung einrichten, um die Ereignisse zu erfassen, wie Sie die Benachrichtigung einrichten und wie Sie die in der Ereignistabelle aufgezeichneten Ereignisse interpretieren:
Bemerkung
Die Protokollierung von Ereignissen für dynamische Tabellen ist mit Kosten verbunden. Siehe Kosten der Telemetriedatenerfassung.
Schweregrad der zu erfassenden Ereignisse festlegen¶
Bemerkung
Wenn Sie den Schweregrad nicht festlegen, werden keine Ereignisse erfasst.
Um Ereignisse für dynamische Tabellen einzurichten, die in der Ereignistabelle aufgezeichnet werden sollen, legen Sie den Schweregrad der Ereignisse fest, die in der Ereignistabelle erfasst werden sollen. Ereignisse werden auf den folgenden Ebenen erfasst:
ERROR
: Ereignisse für Aktualisierungsfehler.WARN
: Fehler bei der Aktualisierung von vorgelagerten dynamischen Tabellen und Ereignisse für Aktualisierungsfehler.INFO
: Ereignisse für erfolgreiche Aktualisierung, Fehler bei der Aktualisierung von vorgelagerten dynamischen Tabellen und Ereignisse für Aktualisierungsfehler.
Um die Ebene festzulegen, stellen Sie den Parameter LOG_LEVEL für das Konto oder Objekt ein. Sie können die Ebene festlegen für:
Alle Objekte im Konto
Alle Objekte in einer Datenbank oder einem Schema
Eine bestimmte dynamische Tabelle
Beispiel:
Um Ereignisse und Meldungen auf ERROR-Ebene für alle Objekte des Kontos zu erfassen, führen Sie ALTER ACCOUNT SET LOG_LEVEL aus:
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
Beachten Sie, dass diese Ebene alle Arten von Objekten im Konto betrifft, einschließlich UDFs, gespeicherte Prozeduren, dynamische Tabellen und Aufgaben.
Um Ereignisse und Meldungen auf INFO-Ebene für alle Objekte in der Datenbank
my_db
zu erfassen, führen Sie ALTER DATABASE … SET LOG_LEVEL aus:ALTER DATABASE my_db SET LOG_LEVEL = INFO;
Ähnlich wie bei der Einstellung der Ebene für das Konto wirkt sich die Einstellung der Ebene für die Datenbank auf alle Arten von Objekten in der Datenbank aus, einschließlich UDFs, gespeicherte Prozeduren, dynamische Tabellen und Aufgaben.
Um Ereignisse auf WARN-Ebene für die dynamische Tabelle
my_dynamic_table
zu erfassen, führen Sie ALTER DYNAMIC TABLE … SET LOG_LEVEL aus:ALTER DYNAMIC TABLE my_dynamic_table SET LOG_LEVEL = WARN;
Benachrichtigung über neue Daten einrichten¶
Nachdem Sie den Schweregrad für Protokollierereignisse festgelegt haben, können Sie eine Benachrichtigung über neue Daten einrichten, um die Ereignistabelle auf neue Ereignisse zu überwachen, die auf einen Fehler bei einer dynamischen Tabellenaktualisierung hinweisen. Eine Benachrichtigung über neue Daten wird ausgelöst, wenn neue Zeilen in die Ereignistabelle eingefügt werden, die die in der Benachrichtigung angegebene Bedingung erfüllen.
Bemerkung
Um die Benachrichtigung über neue Daten zu erstellen, müssen Sie eine Rolle verwenden, die über die erforderlichen Berechtigungen zur Abfrage der Ereignistabelle verfügt.
Wenn die Bedingung für die Benachrichtigung die Standard-Ereignistabelle (SNOWFLAKE.TELEMETRY.EVENTS) oder die vordefinierte Ansicht (SNOWFLAKE.TELEMETRY.EVENTS_VIEW Ansicht) abfragt, siehe Rollen für den Zugriff auf die Standard-Ereignistabelle und EVENTS_VIEW.
Um den Zugriff auf die Ansicht EVENTS_VIEW zu verwalten, siehe Verwalten Sie den Zugriff auf die Ansicht EVENTS_VIEW.
Wenn die Bedingung für die Benachrichtigung eine benutzerdefinierte Ereignistabelle abfragt, siehe Zugriffssteuerungsrechte für Ereignistabelle.
Um den Zugriff auf eine benutzerdefinierte Ereignistabelle zu verwalten, siehe Verwalten des Zugriffs auf Ereignistabellendaten.
Um nach Ereignissen in dynamischen Tabellen abzufragen, wählen Sie in der Bedingung der Benachrichtigung Zeilen aus, in denen resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE'
ist. Um die Liste der Ereignisse einzugrenzen, können Sie nach folgenden Spalten filtern:
Um die Ergebnisse auf dynamische Tabellen in einer bestimmten Datenbank zu beschränken, verwenden Sie
resource_attributes:"snow.database.name"
.Um Ereignisse zurückzugeben, bei denen die Aktualisierung aufgrund eines Fehlers in der dynamischen Tabelle fehlgeschlagen ist, verwenden Sie
value:state = 'FAILED'
.Um Ereignisse zurückzugeben, bei denen die Aktualisierung aufgrund eines Fehlers mit einer vorgelagerten dynamischen Tabelle fehlgeschlagen ist, verwenden Sie
value:state = 'UPSTREAM_FAILURE'
.
Informationen zu den Werten, die für ein Ereignis in einer dynamischen Tabelle protokolliert werden, finden Sie unter Für Ereignisse in dynamischen Tabellen protokollierte Informationen.
Die folgende Anweisung erstellt beispielsweise eine Benachrichtigung über neue Daten, die eine Aktion ausführt, wenn Aktualisierungen für dynamische Tabellen in der Datenbank my_db
fehlschlagen. Das Beispiel geht davon aus, dass:
Ihre aktive Ereignistabelle ist die Standard-Ereignistabelle (SNOWFLAKE.TELEMETRY.EVENTS).
Sie haben eine Webhook-Benachrichtigungsintegration für diesen Slack-Kanal eingerichtet.
CREATE ALERT my_alert_on_dt_refreshes
IF( EXISTS(
SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
WHERE resource_attributes:"snow.executable.type" = 'dynamic_table'
AND resource_attributes:"snow.database.name" = 'my_db'
AND record_attributes:"event.name" = 'refresh.status'
AND record:"severity_text" = 'ERROR'
AND value:"state" = 'FAILED'))
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;
Für Ereignisse in dynamischen Tabellen protokollierte Informationen¶
Wenn eine dynamische Tabelle aktualisiert wird, wird ein Ereignis in der Ereignistabelle protokolliert. Die folgenden Abschnitte beschreiben die Zeile der Ereignistabelle, die das Ereignis darstellt:
Spaltenwerte der Ereignistabelle¶
Wenn eine dynamische Tabelle aktualisiert wird, wird eine Zeile mit den folgenden Werten in die Ereignistabelle eingefügt.
Bemerkung
Wenn eine Spalte unten nicht aufgeführt ist, ist der Spaltenwert für das Ereignis NULL.
Spalte |
Datentyp |
Beschreibung |
---|---|---|
|
TIMESTAMP_NTZ |
UTC-Zeitstempel für den Zeitpunkt, an dem das Ereignis erstellt wurde. |
|
TIMESTAMP_NTZ |
UTC-Zeit, die für Protokolle verwendet wird. Derzeit ist dies derselbe Wert, der in der Spalte |
|
OBJECT |
Attribute, die die aktualisierte dynamische Tabelle identifizieren. |
|
STRING |
Der Ereignistyp, der |
|
OBJECT |
Details über den Status der Aktualisierung der dynamischen Tabelle. |
|
VARIANT |
Der Status der Aktualisierung der dynamischen Tabelle und, falls die Aktualisierung fehlgeschlagen ist, die Fehlermeldung für den Fehler. |
Schlüssel-Wert-Paare in der Spalte resource_attributes
¶
Die Spalte resource_attributes
enthält einen Wert OBJECT mit den folgenden Schlüssel-Wert-Paaren:
Attributname |
Attributtyp |
Beschreibung |
Beispiel |
---|---|---|---|
|
INTEGER |
Der interne/systemgenerierte Bezeichner der Datenbank, die die dynamische Tabelle enthält. |
|
|
VARCHAR |
Der Name der Datenbank, die die dynamische Tabelle enthält. |
|
|
INTEGER |
Der interne/systemgenerierte Bezeichner der dynamischen Tabelle, die aktualisiert wurde. |
|
|
VARCHAR |
Der Name der dynamischen Tabelle, die aktualisiert wurde. |
|
|
VARCHAR |
Der Typ des Objekts. Der Wert ist |
|
|
INTEGER |
Der interne/systemgenerierte Bezeichner der Rolle mit der Berechtigung OWNERSHIP für die dynamische Tabelle. |
|
|
VARCHAR |
Der Name der Rolle mit der Berechtigung OWNERSHIP für die dynamische Tabelle. |
|
|
VARCHAR |
Der Typ der Rolle, die Eigentümer des Objekts ist, zum Beispiel |
|
|
VARCHAR |
ID der Abfrage, mit der die dynamische Tabelle aktualisiert wurde. |
|
|
INTEGER |
Der interne/systemgenerierte Bezeichner des Schemas, das die dynamische Tabelle enthält. |
|
|
VARCHAR |
Der Name des Schemas, das die dynamische Tabelle enthält. |
|
|
INTEGER |
Der interne/systemgenerierte Bezeichner des Warehouse, das zur Aktualisierung der dynamischen Tabelle verwendet wird. |
|
|
VARCHAR |
Der Name des Warehouse, das zur Aktualisierung der dynamischen Tabelle verwendet wird. |
|
Schlüssel-Wert-Paare in der Spalte record
¶
Die Spalte record
enthält einen Wert OBJECT mit den folgenden Schlüssel-Wert-Paaren:
Schlüssel |
Typ |
Beschreibung |
Beispiel |
---|---|---|---|
|
VARCHAR |
Der Name des Ereignisses. Der Wert ist |
|
|
VARCHAR |
Der Schweregrad des Ereignisses, der einen der folgenden Werte annehmen kann:
|
|
Schlüssel-Wert-Paare in der Spalte value
¶
Die Spalte value
enthält einen Wert VARIANT mit den folgenden Schlüssel-Wert-Paaren:
Schlüssel |
Typ |
Beschreibung |
Beispiel |
---|---|---|---|
|
VARCHAR |
Der Status der Aktualisierung, der die folgenden Werte annehmen kann:
|
|
|
VARCHAR |
Wenn der Wert in |
|