次の例のコードは、 testEvent というイベントを追加し、そのイベントに2つの属性 key と result を関連付けます。
// Adding an event without attributes.Telemetry.addEvent("testEvent")// Adding an event with attributes.AttributeseventAttributes=Attributes.of(AttributeKey.stringKey("key"),"run",AttributeKey.longKey("result"),Long.valueOf(123))Telemetry.addEvent("testEventWithAttributes",eventAttributes)
これらのイベントを追加すると、イベントテーブルに2つの行が作成され、それぞれの RECORD 列に異なる値が含まれます。
次の例のコードは、 OpenTelemetry API と OpenTelemetryコンテキスト伝搬 API を使って、新しい my.span スパンを作成します。そして、新しいスパンにイベントを追加します。最後に、スパンのイベント・データをイベント・テーブルに取り込むために、スパンを終了させます。コードが Span.end メソッドを呼び出さない場合、データはイベント・テーブルに取り込まれません。
CREATEORREPLACEFUNCTIONtestScalaUserSpans(xVARCHAR)RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION=2.12PACKAGES=('com.snowflake:telemetry:latest')HANDLER='TestScalaClass.run'AS$$classTestScalaClass{importcom.snowflake.telemetry.Telemetryimportio.opentelemetry.api.GlobalOpenTelemetryimportio.opentelemetry.api.trace.Tracerimportio.opentelemetry.api.trace.Spanimportio.opentelemetry.context.Scopedefrun(x:String):String={valtracer:Tracer=GlobalOpenTelemetry.getTracerProvider().get("my.tracer")valspan:Span=tracer.spanBuilder("my.span").startSpan()span.addEvent("test event from scala")span.end()returnx}} $$;
CREATEORREPLACEFUNCTIONtestScalaUserSpans(xVARCHAR)RETURNSVARCHARLANGUAGESCALARUNTIME_VERSION=2.13PACKAGES=('com.snowflake:telemetry:latest')HANDLER='TestScalaClass.run'AS$$classTestScalaClass{importcom.snowflake.telemetry.Telemetryimportio.opentelemetry.api.GlobalOpenTelemetryimportio.opentelemetry.api.trace.Tracerimportio.opentelemetry.api.trace.Spanimportio.opentelemetry.context.Scopedefrun(x:String):String={valtracer:Tracer=GlobalOpenTelemetry.getTracerProvider().get("my.tracer")valspan:Span=tracer.spanBuilder("my.span").startSpan()span.addEvent("test event from scala")span.end()returnx}} $$;
CREATEORREPLACEPROCEDUREdo_tracing()RETURNSSTRINGLANGUAGESCALARUNTIME_VERSION='2.12'PACKAGES=('com.snowflake:snowpark_2.12:latest','com.snowflake:telemetry:latest')HANDLER='ProcedureHandler.run'AS$$importcom.snowflake.snowpark_java.Sessionimportcom.snowflake.telemetry.Telemetryimportio.opentelemetry.api.common.AttributeKeyimportio.opentelemetry.api.common.AttributesclassProcedureHandler{defrun(session:Session):String={// Set span attribute.Telemetry.setSpanAttribute("example.proc.do_tracing","begin")// Add an event without attributes.Telemetry.addEvent("run_method_start")// Add an event with attributes.valeventAttributes:Attributes=Attributes.of(AttributeKey.stringKey("example.method.name"),"run")Telemetry.addEvent("event_with_attributes",eventAttributes)// Set span attribute.Telemetry.setSpanAttribute("example.proc.do_tracing","complete")return"SUCCESS"}} $$;
CREATEORREPLACEPROCEDUREdo_tracing()RETURNSSTRINGLANGUAGESCALARUNTIME_VERSION='2.13'PACKAGES=('com.snowflake:snowpark_2.13:latest','com.snowflake:telemetry:latest')HANDLER='ProcedureHandler.run'AS$$importcom.snowflake.snowpark_java.Sessionimportcom.snowflake.telemetry.Telemetryimportio.opentelemetry.api.common.AttributeKeyimportio.opentelemetry.api.common.AttributesclassProcedureHandler{defrun(session:Session):String={// Set span attribute.Telemetry.setSpanAttribute("example.proc.do_tracing","begin")// Add an event without attributes.Telemetry.addEvent("run_method_start")// Add an event with attributes.valeventAttributes:Attributes=Attributes.of(AttributeKey.stringKey("example.method.name"),"run")Telemetry.addEvent("event_with_attributes",eventAttributes)// Set span attribute.Telemetry.setSpanAttribute("example.proc.do_tracing","complete")return"SUCCESS"}} $$;