トレース: プロシージャ呼び出しを介して親から子へ伝播されたスパンおよびトレース IDs

注意

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

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

イベントトレース では、スパンとトレース IDs が以下のように動作します。

変更前:

チェーンされたストアドプロシージャまたは UDFs によって作成された各スパンの trace_id は、ハンドラーが JavaScript またはSnowflake Scriptingで記述されている場合、一意になります。

イベントテーブルの RECORD 列には parent_span_id フィールドが存在しません。

ネイティブアプリのプロバイダーとコンシューマーには、共有イベントの異なる trace_id 値が表示されます。プロバイダーにはハッシュ化されたバージョンが表示されます。

変更後:

この変更により、 JavaScript およびSnowflake Scriptingで記述されたハンドラーのトレース ID 伝播のサポートが追加されました。Python、Java、Scalaで記述されたハンドラーはすでにサポートされています。新しい動作は、ハンドラーが JavaScript で記述されているストアドプロシージャと UDFs に適用され、Snowflake Scriptingで記述されたストアドプロシージャハンドラーにも適用されます。

JavaScript またはSnowflake Scriptingハンドラーのあるチェーンされたストアドプロシージャまたは UDFs により生成されたスパンには、同じ trace_id があります。RECORD 列には、 parent_span_id 属性のある場合があります。

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

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

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

この変更は、デバッグを改善するためです。

参照: 1683