Python Snowpark ストアドプロシージャおよび UDFs: イベントテーブルのトレース改善(保留中)

注意

この動作変更は2024_02バンドルにあります。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

Pythonストアドプロシージャが別のPythonストアドプロシージャを呼び出したり、PythonストアドプロシージャがPython UDF を呼び出したりするときに、チェーンされた呼び出しからのクエリがどのようにリンクされるかを確認できるようになりました。この機能を使用するには、イベントテーブルを設定し、トレースを有効にする必要があります。イベントテーブルの TRACE:"trace_id" 列と RECORD:"parent_span_id" 列に表示される値は以下のとおりです。

変更前:

チェーンされたPythonストアドプロシージャまたは UDFs によって作成された各スパンの trace_id は一意です。イベントテーブルの RECORD 列には parent_span_id フィールドが存在しません。Native Appsのプロバイダーとコンシューマーには、共有イベントの異なる trace_ids が表示されます。プロバイダーにはハッシュ化されたバージョンが表示されます。

変更後:

チェーンされたPythonストアドプロシージャまたは UDFs によって生成されたスパンには、同じ trace_id があります。

チェーンされたPythonストアドプロシージャまたは UDFs によって生成されたスパンには、 span_idparent_span_id の間に親子関係があります。Pythonストアドプロシージャは任意の長さのチェーンで他のストアドプロシージャを呼び出すことができますが、 UDFs は SQL ステートメントを実行できないため、 UDF を呼び出すとチェーンが終了します。しかし、トレース情報は引き続き UDF のスパンに伝達されます。

Pythonストアドプロシージャまたは UDF がユーザーによって直接呼び出された場合(ルート)、 trace_id はランダムな ID になり、 parent_span_id はありません。ストアドプロシージャのトレースが無効で、そのストアドプロシージャが別のストアドプロシージャまたは UDF を呼び出す場合、子のスパンの trace_id はランダムになり、 parent_span_id はありません。つまり、トレースは子から再起動されます。

Native Appsのプロバイダーとコンシューマーには、共有されたPythonストアドプロシージャや UDF イベントに対して同じ trace_id が表示されるため、デバッグが容易になります。

他のPythonストアドプロシージャまたは UDFs を呼び出すPythonストアドプロシージャを含んだアプリケーションを共有するNative Appsプロバイダーは、ストアドプロシージャのコールスタックと親子関係をコンシューマーに公開します。これを避けるには、トレースを無効にします。

参照: 1520