From 22dafed316a59561c3a9f82c02601f51e2453203 Mon Sep 17 00:00:00 2001 From: ldetmer Date: Mon, 23 Mar 2026 13:23:03 -0400 Subject: [PATCH 01/12] feat(bigquery): add gcp.resource.destination.id for span tracing --- .../bigquery/spi/v2/HttpBigQueryRpc.java | 220 +++++++++++++++--- .../telemetry/BigQueryTelemetryTracer.java | 2 +- .../bigquery/spi/v2/HttpBigQueryRpcTest.java | 41 +++- 3 files changed, 224 insertions(+), 39 deletions(-) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java index bd346d53c19b..ab63604a2682 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java @@ -183,7 +183,8 @@ public Dataset getDatasetSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.getDataset", "DatasetService", "GetDataset", - options), + options, + "//bigquery.googleapis.com/projects/" + projectId + "/datasets/" + datasetId), span -> { Dataset dataset = bqGetRequest.execute(); if (span != null) { @@ -225,7 +226,8 @@ public Tuple> listDatasetsSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listDatasets", "DatasetService", "ListDatasets", - options), + options, + "//bigquery.googleapis.com/projects/" + projectId + "/datasets"), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", datasetsListRequest.getPageToken()); @@ -274,7 +276,11 @@ public Dataset createSkipExceptionTranslation(Dataset dataset, Map op "com.google.cloud.bigquery.BigQueryRpc.createDataset", "DatasetService", "InsertDataset", - options), + options, + "//bigquery.googleapis.com/projects/" + + dataset.getDatasetReference().getProjectId() + + "/datasets/" + + dataset.getDatasetReference().getDatasetId()), span -> { Dataset datasetResponse = bqCreateRequest.execute(); if (span != null) { @@ -316,7 +322,13 @@ public Table createSkipExceptionTranslation(Table table, Map options) "com.google.cloud.bigquery.BigQueryRpc.createTable", "TableService", "InsertTable", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId() + + "/tables/" + + reference.getTableId()), span -> { Table tableResponse = bqCreateRequest.execute(); if (span != null) { @@ -356,7 +368,13 @@ public Routine createSkipExceptionTranslation(Routine routine, Map op "com.google.cloud.bigquery.BigQueryRpc.createRoutine", "RoutineService", "InsertRoutine", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId() + + "/routines/" + + reference.getRoutineId()), span -> { Routine routineResponse = bqCreateRequest.execute(); if (span != null) { @@ -481,7 +499,8 @@ public boolean deleteDatasetSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.deleteDataset", "DatasetService", "DeleteDataset", - options), + options, + "//bigquery.googleapis.com/projects/" + projectId + "/datasets/" + datasetId), span -> { bqDeleteRequest.execute(); return true; @@ -523,7 +542,11 @@ public Dataset patchSkipExceptionTranslation(Dataset dataset, Map opt "com.google.cloud.bigquery.BigQueryRpc.patchDataset", "DatasetService", "PatchDataset", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId()), span -> { Dataset datasetResponse = bqPatchRequest.execute(); if (span != null) { @@ -567,7 +590,13 @@ public Table patchSkipExceptionTranslation(Table table, Map options) "com.google.cloud.bigquery.BigQueryRpc.patchTable", "TableService", "PatchTable", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId() + + "/tables/" + + reference.getTableId()), span -> { Table tableResponse = bqPatchRequest.execute(); if (span != null) { @@ -610,7 +639,16 @@ public Table getTableSkipExceptionTranslation( return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.getTable", "TableService", "GetTable", options), + "com.google.cloud.bigquery.BigQueryRpc.getTable", + "TableService", + "GetTable", + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables/" + + tableId), span -> { Table tableResponse = bqGetRequest.execute(); if (span != null) { @@ -658,7 +696,12 @@ public Tuple> listTablesSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listTables", "TableService", "ListTables", - options), + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables"), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", tableListRequest.getPageToken()); @@ -721,7 +764,13 @@ public boolean deleteTableSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.deleteTable", "TableService", "DeleteTable", - null), + null, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables/" + + tableId), span -> { bqDeleteRequest.execute(); return true; @@ -760,7 +809,13 @@ public Model patchSkipExceptionTranslation(Model model, Map options) "com.google.cloud.bigquery.BigQueryRpc.patchModel", "ModelService", "PatchModel", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId() + + "/models/" + + reference.getModelId()), span -> { Model modelResponse = bqPatchRequest.execute(); if (span != null) { @@ -803,7 +858,16 @@ public Model getModelSkipExceptionTranslation( return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.getModel", "ModelService", "GetModel", options), + "com.google.cloud.bigquery.BigQueryRpc.getModel", + "ModelService", + "GetModel", + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/models/" + + modelId), span -> { Model modelResponse = bqGetRequest.execute(); if (span != null) { @@ -845,7 +909,12 @@ public Tuple> listModelsSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listModels", "ModelService", "ListModels", - options), + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/models"), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", modelListRequest.getPageToken()); @@ -892,7 +961,13 @@ public boolean deleteModelSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.deleteModel", "ModelService", "DeleteModel", - null), + null, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/models/" + + modelId), span -> { bqDeleteRequest.execute(); return true; @@ -933,7 +1008,13 @@ public Routine updateSkipExceptionTranslation(Routine routine, Map op "com.google.cloud.bigquery.BigQueryRpc.updateRoutine", "RoutineService", "UpdateRoutine", - options), + options, + "//bigquery.googleapis.com/projects/" + + reference.getProjectId() + + "/datasets/" + + reference.getDatasetId() + + "/routines/" + + reference.getRoutineId()), span -> { Routine routineResponse = bqUpdateRequest.execute(); if (span != null) { @@ -979,7 +1060,13 @@ public Routine getRoutineSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.getRoutine", "RoutineService", "GetRoutine", - options), + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/routines/" + + routineId), span -> { Routine routineResponse = bqGetRequest.execute(); if (span != null) { @@ -1021,7 +1108,12 @@ public Tuple> listRoutinesSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listRoutines", "RoutineService", "ListRoutines", - options), + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/routines"), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", routineListRequest.getPageToken()); @@ -1067,7 +1159,13 @@ public boolean deleteRoutineSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.deleteRoutine", "RoutineService", "DeleteRoutine", - null), + null, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/routines/" + + routineId), span -> { bqDeleteRequest.execute(); return true; @@ -1104,7 +1202,13 @@ public TableDataInsertAllResponse insertAllSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.insertAll", "TableDataService", "InsertAll", - null), + null, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables/" + + tableId), span -> insertAllRequest.execute()); } @@ -1144,7 +1248,13 @@ public TableDataList listTableDataSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listTableData", "TableDataService", "List", - options), + options, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables/" + + tableId), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", bqListRequest.getPageToken()); @@ -1194,7 +1304,13 @@ public TableDataList listTableDataWithRowLimitSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.listTableDataWithRowLimit", "TableDataService", "List", - null), + null, + "//bigquery.googleapis.com/projects/" + + projectId + + "/datasets/" + + datasetId + + "/tables/" + + tableId), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", bqListRequest.getPageToken()); @@ -1234,7 +1350,11 @@ public Job getJobSkipExceptionTranslation( return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.getJob", "JobService", "GetJob", options), + "com.google.cloud.bigquery.BigQueryRpc.getJob", + "JobService", + "GetJob", + options, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobId), span -> { Job jobResponse = bqGetRequest.execute(); if (span != null) { @@ -1272,7 +1392,11 @@ public Job getQueryJobSkipExceptionTranslation(String projectId, String jobId, S return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.getQueryJob", "JobService", "GetJob", null), + "com.google.cloud.bigquery.BigQueryRpc.getQueryJob", + "JobService", + "GetJob", + null, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobId), span -> { Job jobResponse = bqGetRequest.execute(); if (span != null) { @@ -1323,7 +1447,11 @@ public Tuple> listJobsSkipExceptionTranslation( return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.listJobs", "JobService", "ListJobs", options), + "com.google.cloud.bigquery.BigQueryRpc.listJobs", + "JobService", + "ListJobs", + options, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs"), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", listJobsRequest.getPageToken()); @@ -1388,7 +1516,11 @@ public boolean cancelSkipExceptionTranslation(String projectId, String jobId, St return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.cancelJob", "JobService", "CancelJob", null), + "com.google.cloud.bigquery.BigQueryRpc.cancelJob", + "JobService", + "CancelJob", + null, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobId), span -> { bqCancelRequest.execute(); return true; @@ -1417,7 +1549,11 @@ public boolean deleteJobSkipExceptionTranslation( return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.deleteJob", "JobService", "DeleteJob", null), + "com.google.cloud.bigquery.BigQueryRpc.deleteJob", + "JobService", + "DeleteJob", + null, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobName), span -> { bqDeleteRequest.execute(); return true; @@ -1461,7 +1597,8 @@ public GetQueryResultsResponse getQueryResultsSkipExceptionTranslation( "com.google.cloud.bigquery.BigQueryRpc.getQueryResults", "JobService", "GetQueryResults", - options), + options, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobId), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", queryRequest.getPageToken()); @@ -1504,7 +1641,8 @@ public GetQueryResultsResponse getQueryResultsWithRowLimitSkipExceptionTranslati "com.google.cloud.bigquery.BigQueryRpc.getQueryResultsWithRowLimit", "JobService", "GetQueryResults", - null), + null, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs/" + jobId), span -> { if (span != null) { span.setAttribute("bq.rpc.page_token", queryRequest.getPageToken()); @@ -1533,7 +1671,11 @@ public QueryResponse queryRpcSkipExceptionTranslation(String projectId, QueryReq return executeWithSpan( createRpcTracingSpan( - "com.google.cloud.bigquery.BigQueryRpc.queryRpc", "JobService", "Query", null), + "com.google.cloud.bigquery.BigQueryRpc.queryRpc", + "JobService", + "Query", + null, + "//bigquery.googleapis.com/projects/" + projectId + "/jobs"), span -> { return queryRequest.execute(); }); @@ -1660,7 +1802,8 @@ public Policy getIamPolicySkipExceptionTranslation(String resourceId, Map