Visitar URL original
feat(bigquery): Add OpenTelemetry Samples by whuffman36 · Pull Request #3899 · googleapis/java-bigquery · GitHub
Skip to content
This repository was archived by the owner on Aug 30, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions samples/install-without-bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,37 @@
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.39.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-context</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-common</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-trace</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-logging</artifactId>
<version>1.48.0</version>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>com.google.cloud</groupId>
Expand Down
42 changes: 42 additions & 0 deletions samples/snapshot/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-bom</artifactId>
<version>1.48.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!-- {x-version-update-start:google-cloud-bigquery:current} -->
<dependency>
Expand Down Expand Up @@ -82,6 +94,36 @@
<version>1.4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-context</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-common</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-trace</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-logging</artifactId>
<version>1.48.0</version>
</dependency>
</dependencies>

<!-- compile and run all snippet tests -->
Expand Down
37 changes: 37 additions & 0 deletions samples/snippets/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-bom</artifactId>
<version>1.48.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

Expand All @@ -59,6 +66,36 @@
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-context</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-common</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-trace</artifactId>
<version>1.48.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-logging</artifactId>
<version>1.48.0</version>
</dependency>
<!-- [END bigquery_java_dependencies] -->
<!-- [END bigquery_install_with_bom] -->

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.bigquery;

// [START bigquery_enable_otel_tracing]
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetInfo;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.util.logging.ConsoleHandler;
import java.util.logging.Logger;

public class EnableOpenTelemetryTracing {
private static final Logger log = Logger.getLogger(EnableOpenTelemetryTracing.class.getName());

public static void main(String[] args) {
// Set logging to System.err.
ConsoleHandler ch = new ConsoleHandler();
log.addHandler(ch);

// TODO(developer): Replace values before running the sample.
final String tracerName = "Sample Tracer";
final String datasetId = "sampleDatasetId";

// Create TracerProvider that exports to a logger.
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
.setSampler(Sampler.alwaysOn())
.build();

// Create global OpenTelemetry instance using the TracerProvider.
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();

// Create Tracer instance from the OpenTelemetry object. Tracers are used to create
// Spans. There can be multiple Tracers in an OpenTelemetry instance.
Tracer tracer = otel.getTracer(tracerName);

enableOpenTelemetry(tracer, datasetId);
}

public static void enableOpenTelemetry(Tracer tracer, String datasetId) {
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
// be set to enable tracing.
BigQueryOptions otelOptions =
BigQueryOptions.newBuilder()
.setEnableOpenTelemetryTracing(true)
.setOpenTelemetryTracer(tracer)
.build();
BigQuery bigquery = otelOptions.getService();

try {
// Create dataset.
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
Dataset dataset = bigquery.create(info);
} catch (Exception e) {
System.out.println(
String.format("Failed to create dataset: %s: %s", e.toString(), e.getMessage()));
} finally {
bigquery.delete(datasetId);
}
}
}
// [END bigquery_enable_otel_tracing]
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.example.bigquery;

// [START bigquery_enable_otel_tracing_with_parent_span]
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetInfo;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Scope;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.time.LocalDate;
import java.util.logging.ConsoleHandler;
import java.util.logging.Logger;

public class EnableOpenTelemetryTracingWithParentSpan {
private static final Logger log =
Logger.getLogger(EnableOpenTelemetryTracingWithParentSpan.class.getName());

public static void main(String[] args) {
// Set logging to System.err.
ConsoleHandler ch = new ConsoleHandler();
log.addHandler(ch);

// TODO(developer): Replace values before running the sample.
final String tracerName = "Sample Tracer";
final String parentSpanName = "Sample Parent Span";
final String datasetId = "sampleDatasetId";

// Create TracerProvider that exports to a logger.
SdkTracerProvider tracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.builder(LoggingSpanExporter.create()).build())
.setSampler(Sampler.alwaysOn())
.build();

// Create OpenTelemetry instance using the TracerProvider.
OpenTelemetry otel = OpenTelemetrySdk.builder().setTracerProvider(tracerProvider).build();

// Create Tracer instance from the global OpenTelemetry object. Tracers are used to create
// Spans. There can be multiple Tracers in a global OpenTelemetry instance.
final Tracer tracer = otel.getTracer(tracerName);
enableOpenTelemetryWithParentSpan(tracer, parentSpanName, datasetId);
}

public static void enableOpenTelemetryWithParentSpan(
Tracer tracer, String parentSpanName, String datasetId) {
// Create BigQuery client to trace. EnableOpenTelemetryTracing and OpenTelemetryTracer must
// be set to enable tracing.
BigQueryOptions otelOptions =
BigQueryOptions.newBuilder()
.setEnableOpenTelemetryTracing(true)
.setOpenTelemetryTracer(tracer)
.build();
BigQuery bigquery = otelOptions.getService();

LocalDate currentDate = LocalDate.now();

// Create the root parent Span. setNoParent() ensures that it is a parent Span with a Span ID
// of 0.
Span parentSpan =
tracer
.spanBuilder(parentSpanName)
.setNoParent()
.setAttribute("current_date", currentDate.toString())
.startSpan();

// The Span Context is automatically passed on to any functions called within the scope of the
// try block. parentSpan.makeCurrent() sets parentSpan to be the parent of any Spans created in
// this scope, or the scope of any functions called within this scope.
try (Scope parentScope = parentSpan.makeCurrent()) {
DatasetInfo info = DatasetInfo.newBuilder(datasetId).build();
Dataset dataset = bigquery.create(info);
} catch (Exception e) {
System.out.println(
String.format("Failed to create dataset: %s: %s", e.toString(), e.getMessage()));
} finally {
// finally block ensures that Spans are cleaned up properly.
parentSpan.end();
bigquery.delete(datasetId);
}
}
}
// [END bigquery_enable_otel_tracing_with_parent_span]
Loading