Gespeicherte Snowpark-Prozeduren und UDFs in Python: Verbesserte Ablaufverfolgung in der Ereignistabelle (Ausstehend)

Achtung

Diese Verhaltensänderung ist in Bundle 2024_02 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Benutzer können nun ermitteln, wie Abfragen aus verketteten Aufrufen verknüpft sind, wenn eine gespeicherte Python-Prozedur eine andere gespeicherte Python-Prozedur aufruft oder eine gespeicherte Python-Prozedur eine Python-UDF aufruft. Um diese Möglichkeit nutzen zu können, muss eine Ereignistabelle konfiguriert und die Ablaufverfolgung aktiviert sein. Die in den Spalten TRACE:"trace_id" und RECORD:"parent_span_id" der Ereignistabelle angezeigten Werte lauten wie folgt:

Vor der Änderung:

Der trace_id-Wert jeder der durch verkettete gespeicherte Python-Prozeduren oder Python-UDFs erstellten Bereiche (Spans) ist eindeutig. Das Feld parent_span_id ist nicht in der RECORD-Spalte der Ereignistabelle vorhanden. Anbietern und Verbrauchern von Native Apps werden unterschiedliche trace_ids-Werte für freigegeben Ereignisse angezeigt. Anbietern wird die Hash-Version angezeigt.

Nach der Änderung:

Bereiche (Spans), die durch verkettete gespeicherte Python-Prozeduren oder Python-UDFs generiert werden, haben denselben trace_id-Wert.

Bereiche (Spans), die durch verkettete gespeicherte Python-Prozeduren oder Python-UDFs generiert werden, haben eine Übergeordnet/Untergeordnet-Beziehung zwischen span_id und parent_span_id. Gespeicherte Python-Prozeduren können andere gespeicherte Prozeduren in einer beliebig langen Kette aufrufen, aber UDFs können keine SQL-Anweisungen ausführen, sodass der Aufruf einer UDF die Kette beendet. Die Ablaufverfolgungsinformationen werden jedoch weiterhin an den Bereich (Span) der UDF weitergegeben.

Wenn die gespeicherte Python-Prozedur oder die Python-UDF direkt vom Benutzer (dem Stamm) aufgerufen wurde, ist der trace_id-Wert eine zufällige ID und es gibt keinen parent_span_id-Wert. Wenn die Ablaufverfolgung für eine gespeicherte Prozedur deaktiviert ist und diese eine andere gespeicherte Prozedur oder UDF aufruft, dann ist der trace_id-Wert der untergeordneten Bereiche (Spans) zufällig und es gibt keinen parent_span_id-Wert. Mit anderen Worten: Die Ablaufverfolgung wird beim untergeordneten Element neu gestartet.

Anbietern und Verbrauchern von Native Apps wird derselbe trace_id-Wert für freigegebene Ereignisse von gespeicherten Python-Prozeduren oder Python-UDF angezeigt, sodass sie leichter zu debuggen sind.

Anbieter von Native Apps, die Anwendungen freigeben, die gespeicherte Python-Prozeduren enthalten, die wiederum andere gespeicherte Python-Prozeduren oder Python-UDFs aufrufen, legen dem Verbraucher somit den Aufruf-Stack und die Übergeordnet/Untergeordnet-Beziehungen der gespeicherten Prozeduren offen. Um dies zu vermeiden, deaktivieren Sie die Ablaufverfolgung.

Ref.: 1520