トレース: プロシージャ呼び出しを介して親から子へ伝播されたスパンおよびトレース IDs¶
イベントトレース では、スパンとトレース 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_id
とspan_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