Ausgeben von Ablaufverfolgungsereignissen in JavaScript

Sie können die Klasse snowflake der Snowflake-JavaScript-API verwenden, um Ablaufverfolgungsereignisse von einem in JavaScript geschriebenen Funktions- oder Prozedur-Handler auszugeben. Die JavaScript-API steht für Ihren JavaScript-Handler-Code bereits zur Verfügung.

Stellen Sie vor dem Ausgeben von Ablaufverfolgungsereignissen sicher, dass der Protokolliergrad (Ablaufverfolgungsebene) so eingestellt ist, dass die gewünschten Meldungen in der Ereignistabelle gespeichert werden. Weitere Informationen dazu finden Sie unter Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung.

Bemerkung

Bevor Sie mit der Ausgabe von Ablaufverfolgungsereignissen beginnen können, müssen Sie eine Ereignistabelle einrichten. Weitere Informationen dazu finden Sie unter Überblick über die Ereignisse.

Sie können auf die gespeicherten Daten zu den Ablaufverfolgungsereignissen zugreifen, indem Sie einen SELECT-Befehl auf der Ereignistabelle ausführen. Weitere Informationen dazu finden Sie unter Ablaufverfolgung anzeigen.

Allgemeine Informationen zur Einstellung der Protokollierung und zum Abrufen von Meldungen in Snowflake finden Sie unter Ablaufverfolgungsereignisse von Funktionen und Prozeduren.

Bemerkung

Richtlinien, die beim Hinzufügen von Ablaufverfolgungsereignissen berücksichtigt werden sollten, finden Sie unter Allgemeine Richtlinien für das Hinzufügen von Ablaufverfolgungsereignissen.

Hinzufügen von Ablaufverfolgungsereignissen

Sie können Ablaufverfolgungsereignisse hinzufügen, indem Sie die Funktion snowflake.addEvent aufrufen und einen Namen für das Ereignis übergeben. Sie können einem Ereignis optional auch Attribute (Schlüssel-Wert-Paare) zuordnen.

Die Methode addEvent ist in der folgenden Form verfügbar:

snowflake.addEvent(name [, { key:value [, key:value] } ] );
Copy

Der Handler-Code im folgenden Beispiel fügt zwei Ereignisse hinzu: name_a und name_b. Mit name_b fügt der Code auch zwei Attribute hinzu: score und pass.

create procedure PI_JS()
  returns double
  language javascript
  as
  $$
    snowflake.addEvent('name_a');  // add an event without attributes
    snowflake.addEvent('name_b', {'score': 89, 'pass': true});
    return 3.14;
  $$
  ;
Copy

Das Festlegen dieser Attribute führt zu zwei Zeilen in der Ereignistabelle, die jeweils einen anderen Wert in der Spalte RECORD haben:

{
  "name": "name_a"
}
Copy
{
  "name": "name_b"
}
Copy

Die Ereigniszeile name_b enthält in der Spalte RECORD_ATTRIBUTES die folgenden Attribute:

{
  "score": 89,
  "pass": true
}
Copy

Hinzufügen von Bereichsattributen

Durch Aufruf der Funktion snowflake.setSpanAttribute können Sie Attribute (Schlüssel-Wert-Paare) festlegen, die bestimmten Bereichen (Spans) zugeordnet sind.

Die Funktion setSpanAttribute ist in der folgenden Form verfügbar:

snowflake.setSpanAttribute(key, value);
Copy

Weitere Informationen zu Bereichen (Spans) finden Sie unter Darstellung von Ablaufverfolgungsereignissen in Snowflake.

Der Code im folgenden Beispiel erstellt vier Attribute und legt deren Werte fest:

// Setting span attributes.
snowflake.setSpanAttribute("example.boolean", true);
snowflake.setSpanAttribute("example.long", 2L);
snowflake.setSpanAttribute("example.double", 2.5);
snowflake.setSpanAttribute("example.string", "testAttribute");
Copy

Das Einstellen dieser Attribute führt in der Spalte RECORD_ATTRIBUTES der Ereignistabelle zu folgendem Ergebnis:

{
  "example.boolean": true,
  "example.long": 2,
  "example.double": 2.5,
  "example.string": "testAttribute"
}
Copy

Hinzufügen benutzerdefinierter Bereiche (Spans)

Bemerkung

Die Unterstützung für benutzerdefinierte Zeiträume ist ein Vorschau-Feature, das für alle Konten verfügbar ist.

Sie können benutzerdefinierte Bereiche (Spans) hinzufügen, die sich von dem von Snowflake erstellten Standardbereich unterscheiden. Weitere Informationen zu benutzerdefinierten Bereichen (Spans) finden Sie unter Hinzufügen von benutzerdefinierten Bereichen zu einer Ablaufverfolgung.

Der Code im folgenden Beispiel verwendet die OpenTelemetry API, um einen neuen example_custom_span-Bereich (Span) zu erstellen. Es fügt dann ein Ereignis und ein Attribut zum neuen Bereich (Span) hinzu. Schließlich beendet der Code den Bereich (Span), damit die Ereignisdaten des Bereichs in der Ereignistabelle erfasst werden. Wenn der Code nicht die Span.end-Methode aufruft, werden die Daten nicht in der Ereignistabelle erfasst.

CREATE OR REPLACE FUNCTION javascript_custom_span()
RETURNS STRING
LANGUAGE JAVASCRIPT
AS
$
const { trace } = opentelemetry;
const tracer = trace.getTracer("example_tracer");
// Alternatively, const tracer = opentelemetry.trace.getTracer("example_tracer");

tracer.startActiveSpan("example_custom_span", (span) => {
  span.addEvent("testEventWithAttributes");
  span.setAttribute("testAttribute", "value");

  span.end();
}
$$;
Copy