Protokollierung von Meldungen aus Funktionen und Prozeduren

Sie können Protokollmeldungen (z. B. Warn- oder Fehlermeldungen) von einer gespeicherten Prozedur, UDF oder UDTF protokollieren, auch solche, die Sie unter Verwendung von Snowpark-APIs schreiben. Sie können auf die protokollierten Meldungen über eine Ereignistabelle (eine spezielle vordefinierte Tabellen, in der die Ereignisse, einschließlich protokollierter Meldungen, erfasst werden) zugreifen. Eine Liste der unterstützten Handler-Sprachen finden Sie unter Unterstützte Sprachen.

In einer Java UDF können Sie zum Beispiel SLF4J API verwenden, um Meldungen zu protokollieren. Später können Sie auf diese protokollierten Meldungen über eine Ereignistabelle zugreifen.

Bemerkung

Bevor Sie mit der Protokollierung von Meldungen beginnen können, müssen Sie eine Ereignistabelle einrichten. Weitere Informationen dazu finden Sie unter Einrichten einer Ereignistabelle.

Beispiel für die Protokollierung

Der Python-Code im folgenden Beispiel importiert das Modul logging, ruft einen Logger ab und protokolliert eine Meldung des Protokolliergrads INFO.

Bemerkung

Eine Meldung, die von einer Methode protokolliert wird, die eine Eingabezeile verarbeitet, wird für jede Zeile protokolliert, die von der UDF verarbeitet wird. Wenn die UDF auf einer großen Tabelle ausgeführt wird, kann dies zu einer großen Anzahl von Meldungen in der Ereignistabelle führen.

import logging

logger = logging.getLogger("mylog")

def test_logging(self):
    logger.info("This is an INFO test.")
Copy

Erste Schritte

Um mit der Protokollierung von Handler-Code zu beginnen, führen Sie die folgenden allgemeinen Schritte aus:

  1. Ereignistabelle einrichten.

    Snowflake verwendet Ihre Ereignistabelle, um die von Ihrem Handler-Code protokollierten Meldungen zu speichern. Eine Ereignistabelle hat Spalten, die von Snowflake vorgegeben werden.

  2. Machen Sie sich mit der Protokollierungs-API für die von Ihnen verwendete Handler-Sprache vertraut.

    Eine Liste der Handler-Sprachen finden Sie unter Unterstützte Sprachen. Informieren Sie sich, wie die Protokollierung in Ihrer Sprache vorgenommen wird.

  3. Protokollierungscode zum Handler hinzufügen.

  4. Erfahren Sie, wie Sie über die Ereignistabelle Protokolldaten abrufen.

Protokolliergrad von Protokollmeldungen

Sie können den Umfang der in der Ereignistabelle gespeicherten Protokollereignisdaten verwalten, indem Sie den Protokolliergrad festlegen. Verwenden Sie diese Einstellung, um vor der Protokollierung sicherzustellen, dass Sie den Schweregrad der Protokollmeldung erfassen.

Weitere Informationen dazu finden Sie unter Einstellen des Protokolliergrads.

Unterstützte Sprachen

Sie können Meldungen aus Handler-Code von Funktionen und Prozeduren protokollieren, der in den folgenden Sprachen geschrieben wurde:

Sprache/Typ

Java

JavaScript

Python

Scala

SQL

Gespeicherte Prozeduren

✔ **

Skalare UDFs

UDTFs

✔ *

Legende

*

Dazu gehören auch Snowpark-APIs, die zum Erstellen von UDTFs verwendet wurden.

**

Snowflake Scripting wird zum Schreiben von gespeicherten Prozeduren verwendet.

Bemerkung

Die Protokollierung wird in folgenden Fällen nicht unterstützt:

Unterstützung der Sprache des Handler-Codes

Zur Protokollierung von Meldungen können Sie Funktionen verwenden, die in der Sprache Ihres Handler-Codes üblich sind. Snowflake fängt Meldungen ab und speichert sie in der von Ihnen erstellten Ereignistabelle.

In einer Java UDF können Sie zum Beispiel SLF4J API verwenden, um Meldungen zu protokollieren. Später können Sie auf diese protokollierten Meldungen über eine Ereignistabelle zugreifen.

Wenn Sie vorhaben, Fehlermeldungen zu protokollieren, sollten Sie diese innerhalb des Konstrukts zur Fehlerbehandlung in der von Ihnen verwendeten Sprache protokollieren. Rufen Sie z. B. in einer Java-UDF die Methode zur Protokollierung einer Meldung im Block catch auf, in dem Sie die Ausnahme behandeln.

In der folgenden Tabelle sind die für die Protokollierung unterstützten Handler-Sprachen aufgeführt, zusammen mit Links zu weiteren Informationen zur Protokollierung von Code.

Sprache

Protokollierungsbibliothek

Dokumentation

Java

SLF4J API

Protokollierung von Meldungen in Java

JavaScript

Snowflake JavaScript-API snowflake-Objekt

Protokollierung von Meldungen in JavaScript

Python

logging-Modul der Standardbibliothek

Protokollierung von Meldungen in Python

Scala

SLF4J API

Protokollierung von Meldungen in Scala

Snowflake Scripting

Snowflake SYSTEM$LOG-Funktion.

Protokollierung von Meldungen in Snowflake Scripting

Zugriff auf Protokollmeldung

Sie können auf die in Ihrer Ereignistabelle gespeicherten Protokollmeldungen zugreifen, indem Sie auf der Ereignistabelle einen SELECT-Befehl ausführen. Weitere Informationen dazu finden Sie unter Zugriff auf protokollierte Meldungsdaten.

Kosten der Protokollierung

Wenn Sie Meldungen von einer Funktion oder Prozedur protokollieren, sammelt Snowflake die Meldungen in Batches und erfasst die Batches in der Ereignistabelle.

Für diese Aufgabe nutzt Snowflake von Snowflake verwaltete Ressourcen, die auch als serverloses Computemodell bezeichnet werden. Wie bei anderen serverlosen Features stellt Snowflake Ihrem Konto die Nutzung der Computeressourcen und Clouddienste in Rechnung, die für die Erfassung der protokollierten Meldungen erforderlich sind. Snowflake-Credits werden pro Computestunde berechnet:

  • Snowflake-verwaltete Computeressourcen: 1,25

  • Clouddienste: 1

Diese Kosten sind auf Ihrer Rechnung als separate Posten ausgewiesen.

Um die Credit-Nutzung für die Protokollierung im Zeitverlauf zu bestimmen, verwenden Sie die Ansicht EVENT_USAGE_HISTORY.

So reduzieren Sie die Kosten für die Protokollierung:

  • Vermeiden Sie häufiges Protokollieren über einen langen Zeitraum.

  • Legen Sie den Protokolliergrad der erfassten Meldungen für bestimmte Objekte fest. Legen Sie beispielsweise den Protokolliergrad für bestimmte Funktionen oder Prozeduren in einer Sitzung fest, anstatt den Protokolliergrad für alle Funktionen oder Prozeduren festzulegen.