@@ -193,7 +193,8 @@ public Dataset getDatasetSkipExceptionTranslation(
193193 "DatasetService" ,
194194 "GetDataset" ,
195195 gcpResourceDestinationId ,
196- options ),
196+ options ,
197+ bqGetRequest .getUriTemplate ()),
197198 span -> {
198199 Dataset dataset = bqGetRequest .execute ();
199200 if (span != null ) {
@@ -243,7 +244,8 @@ public Tuple<String, Iterable<Dataset>> listDatasetsSkipExceptionTranslation(
243244 "DatasetService" ,
244245 "ListDatasets" ,
245246 gcpResourceDestinationId ,
246- options ),
247+ options ,
248+ datasetsListRequest .getUriTemplate ()),
247249 span -> {
248250 if (span != null ) {
249251 span .setAttribute ("bq.rpc.page_token" , datasetsListRequest .getPageToken ());
@@ -301,7 +303,8 @@ public Dataset createSkipExceptionTranslation(Dataset dataset, Map<Option, ?> op
301303 "DatasetService" ,
302304 "InsertDataset" ,
303305 gcpResourceDestinationId ,
304- options ),
306+ options ,
307+ bqCreateRequest .getUriTemplate ()),
305308 span -> {
306309 Dataset datasetResponse = bqCreateRequest .execute ();
307310 if (span != null ) {
@@ -354,7 +357,8 @@ public Table createSkipExceptionTranslation(Table table, Map<Option, ?> options)
354357 "TableService" ,
355358 "InsertTable" ,
356359 gcpResourceDestinationId ,
357- options ),
360+ options ,
361+ bqCreateRequest .getUriTemplate ()),
358362 span -> {
359363 Table tableResponse = bqCreateRequest .execute ();
360364 if (span != null ) {
@@ -405,7 +409,8 @@ public Routine createSkipExceptionTranslation(Routine routine, Map<Option, ?> op
405409 "RoutineService" ,
406410 "InsertRoutine" ,
407411 gcpResourceDestinationId ,
408- options ),
412+ options ,
413+ bqCreateRequest .getUriTemplate ()),
409414 span -> {
410415 Routine routineResponse = bqCreateRequest .execute ();
411416 if (span != null ) {
@@ -456,7 +461,8 @@ public Job createSkipExceptionTranslation(Job job, Map<Option, ?> options) throw
456461 "JobService" ,
457462 "InsertJob" ,
458463 gcpResourceDestinationId ,
459- options ),
464+ options ,
465+ bqCreateRequest .getUriTemplate ()),
460466 span -> {
461467 Job jobResponse = bqCreateRequest .execute ();
462468 if (span != null ) {
@@ -504,7 +510,8 @@ public Job createJobForQuerySkipExceptionTranslation(Job job) throws IOException
504510 "JobService" ,
505511 "InsertJob" ,
506512 gcpResourceDestinationId ,
507- null ),
513+ null ,
514+ bqCreateRequest .getUriTemplate ()),
508515 span -> {
509516 Job jobResponse = bqCreateRequest .execute ();
510517 if (span != null ) {
@@ -558,7 +565,8 @@ public boolean deleteDatasetSkipExceptionTranslation(
558565 "DatasetService" ,
559566 "DeleteDataset" ,
560567 gcpResourceDestinationId ,
561- options ),
568+ options ,
569+ bqDeleteRequest .getUriTemplate ()),
562570 span -> {
563571 bqDeleteRequest .execute ();
564572 return true ;
@@ -609,7 +617,8 @@ public Dataset patchSkipExceptionTranslation(Dataset dataset, Map<Option, ?> opt
609617 "DatasetService" ,
610618 "PatchDataset" ,
611619 gcpResourceDestinationId ,
612- options ),
620+ options ,
621+ bqPatchRequest .getUriTemplate ()),
613622 span -> {
614623 Dataset datasetResponse = bqPatchRequest .execute ();
615624 if (span != null ) {
@@ -664,7 +673,8 @@ public Table patchSkipExceptionTranslation(Table table, Map<Option, ?> options)
664673 "TableService" ,
665674 "PatchTable" ,
666675 gcpResourceDestinationId ,
667- options ),
676+ options ,
677+ bqPatchRequest .getUriTemplate ()),
668678 span -> {
669679 Table tableResponse = bqPatchRequest .execute ();
670680 if (span != null ) {
@@ -721,7 +731,8 @@ public Table getTableSkipExceptionTranslation(
721731 "TableService" ,
722732 "GetTable" ,
723733 gcpResourceDestinationId ,
724- options ),
734+ options ,
735+ bqGetRequest .getUriTemplate ()),
725736 span -> {
726737 Table tableResponse = bqGetRequest .execute ();
727738 if (span != null ) {
@@ -779,7 +790,8 @@ public Tuple<String, Iterable<Table>> listTablesSkipExceptionTranslation(
779790 "TableService" ,
780791 "ListTables" ,
781792 gcpResourceDestinationId ,
782- options ),
793+ options ,
794+ tableListRequest .getUriTemplate ()),
783795 span -> {
784796 if (span != null ) {
785797 span .setAttribute ("bq.rpc.page_token" , tableListRequest .getPageToken ());
@@ -853,7 +865,8 @@ public boolean deleteTableSkipExceptionTranslation(
853865 "TableService" ,
854866 "DeleteTable" ,
855867 gcpResourceDestinationId ,
856- null ),
868+ null ,
869+ bqDeleteRequest .getUriTemplate ()),
857870 span -> {
858871 bqDeleteRequest .execute ();
859872 return true ;
@@ -902,7 +915,8 @@ public Model patchSkipExceptionTranslation(Model model, Map<Option, ?> options)
902915 "com.google.cloud.bigquery.BigQueryRpc.patchModel" ,
903916 "ModelService" ,
904917 "PatchModel" ,
905- gcpResourceDestinationId ,
918+ options ,
919+ bqPatchRequest .getUriTemplate ()),
906920 options ),
907921 span -> {
908922 Model modelResponse = bqPatchRequest .execute ();
@@ -960,7 +974,7 @@ public Model getModelSkipExceptionTranslation(
960974 "ModelService" ,
961975 "GetModel" ,
962976 gcpResourceDestinationId ,
963- options ),
977+ options , bqGetRequest . getUriTemplate () ),
964978 span -> {
965979 Model modelResponse = bqGetRequest .execute ();
966980 if (span != null ) {
@@ -1012,7 +1026,8 @@ public Tuple<String, Iterable<Model>> listModelsSkipExceptionTranslation(
10121026 "ModelService" ,
10131027 "ListModels" ,
10141028 gcpResourceDestinationId ,
1015- options ),
1029+ options ,
1030+ modelListRequest .getUriTemplate ()),
10161031 span -> {
10171032 if (span != null ) {
10181033 span .setAttribute ("bq.rpc.page_token" , modelListRequest .getPageToken ());
@@ -1070,7 +1085,8 @@ public boolean deleteModelSkipExceptionTranslation(
10701085 "ModelService" ,
10711086 "DeleteModel" ,
10721087 gcpResourceDestinationId ,
1073- null ),
1088+ null ,
1089+ bqDeleteRequest .getUriTemplate ()),
10741090 span -> {
10751091 bqDeleteRequest .execute ();
10761092 return true ;
@@ -1122,7 +1138,8 @@ public Routine updateSkipExceptionTranslation(Routine routine, Map<Option, ?> op
11221138 "RoutineService" ,
11231139 "UpdateRoutine" ,
11241140 gcpResourceDestinationId ,
1125- options ),
1141+ options ,
1142+ bqUpdateRequest .getUriTemplate ()),
11261143 span -> {
11271144 Routine routineResponse = bqUpdateRequest .execute ();
11281145 if (span != null ) {
@@ -1179,7 +1196,8 @@ public Routine getRoutineSkipExceptionTranslation(
11791196 "RoutineService" ,
11801197 "GetRoutine" ,
11811198 gcpResourceDestinationId ,
1182- options ),
1199+ options ,
1200+ bqGetRequest .getUriTemplate ()),
11831201 span -> {
11841202 Routine routineResponse = bqGetRequest .execute ();
11851203 if (span != null ) {
@@ -1231,7 +1249,8 @@ public Tuple<String, Iterable<Routine>> listRoutinesSkipExceptionTranslation(
12311249 "RoutineService" ,
12321250 "ListRoutines" ,
12331251 gcpResourceDestinationId ,
1234- options ),
1252+ options ,
1253+ routineListRequest .getUriTemplate ()),
12351254 span -> {
12361255 if (span != null ) {
12371256 span .setAttribute ("bq.rpc.page_token" , routineListRequest .getPageToken ());
@@ -1288,7 +1307,8 @@ public boolean deleteRoutineSkipExceptionTranslation(
12881307 "RoutineService" ,
12891308 "DeleteRoutine" ,
12901309 gcpResourceDestinationId ,
1291- null ),
1310+ null ,
1311+ bqDeleteRequest .getUriTemplate ()),
12921312 span -> {
12931313 bqDeleteRequest .execute ();
12941314 return true ;
@@ -1336,7 +1356,8 @@ public TableDataInsertAllResponse insertAllSkipExceptionTranslation(
13361356 "TableDataService" ,
13371357 "InsertAll" ,
13381358 gcpResourceDestinationId ,
1339- null ),
1359+ null ,
1360+ insertAllRequest .getUriTemplate ()),
13401361 span -> insertAllRequest .execute ());
13411362 }
13421363
@@ -1387,7 +1408,8 @@ public TableDataList listTableDataSkipExceptionTranslation(
13871408 "TableDataService" ,
13881409 "List" ,
13891410 gcpResourceDestinationId ,
1390- options ),
1411+ options ,
1412+ bqListRequest .getUriTemplate ()),
13911413 span -> {
13921414 if (span != null ) {
13931415 span .setAttribute ("bq.rpc.page_token" , bqListRequest .getPageToken ());
@@ -1448,7 +1470,8 @@ public TableDataList listTableDataWithRowLimitSkipExceptionTranslation(
14481470 "TableDataService" ,
14491471 "List" ,
14501472 gcpResourceDestinationId ,
1451- null ),
1473+ null ,
1474+ bqListRequest .getUriTemplate ()),
14521475 span -> {
14531476 if (span != null ) {
14541477 span .setAttribute ("bq.rpc.page_token" , bqListRequest .getPageToken ());
@@ -1500,7 +1523,7 @@ public Job getJobSkipExceptionTranslation(
15001523 "JobService" ,
15011524 "GetJob" ,
15021525 gcpResourceDestinationId ,
1503- options ),
1526+ options , bqGetRequest . getUriTemplate () ),
15041527 span -> {
15051528 Job jobResponse = bqGetRequest .execute ();
15061529 if (span != null ) {
@@ -1550,7 +1573,7 @@ public Job getQueryJobSkipExceptionTranslation(String projectId, String jobId, S
15501573 "JobService" ,
15511574 "GetJob" ,
15521575 gcpResourceDestinationId ,
1553- null ),
1576+ null , bqGetRequest . getUriTemplate () ),
15541577 span -> {
15551578 Job jobResponse = bqGetRequest .execute ();
15561579 if (span != null ) {
@@ -1612,7 +1635,7 @@ public Tuple<String, Iterable<Job>> listJobsSkipExceptionTranslation(
16121635 "JobService" ,
16131636 "ListJobs" ,
16141637 gcpResourceDestinationId ,
1615- options ),
1638+ options , listJobsRequest . getUriTemplate () ),
16161639 span -> {
16171640 if (span != null ) {
16181641 span .setAttribute ("bq.rpc.page_token" , listJobsRequest .getPageToken ());
@@ -1689,7 +1712,7 @@ public boolean cancelSkipExceptionTranslation(String projectId, String jobId, St
16891712 "JobService" ,
16901713 "CancelJob" ,
16911714 gcpResourceDestinationId ,
1692- null ),
1715+ null , bqCancelRequest . getUriTemplate () ),
16931716 span -> {
16941717 bqCancelRequest .execute ();
16951718 return true ;
@@ -1730,7 +1753,7 @@ public boolean deleteJobSkipExceptionTranslation(
17301753 "JobService" ,
17311754 "DeleteJob" ,
17321755 gcpResourceDestinationId ,
1733- null ),
1756+ null , bqDeleteRequest . getUriTemplate () ),
17341757 span -> {
17351758 bqDeleteRequest .execute ();
17361759 return true ;
@@ -1783,7 +1806,8 @@ public GetQueryResultsResponse getQueryResultsSkipExceptionTranslation(
17831806 "JobService" ,
17841807 "GetQueryResults" ,
17851808 gcpResourceDestinationId ,
1786- options ),
1809+ options ,
1810+ queryRequest .getUriTemplate ()),
17871811 span -> {
17881812 if (span != null ) {
17891813 span .setAttribute ("bq.rpc.page_token" , queryRequest .getPageToken ());
@@ -1835,7 +1859,8 @@ public GetQueryResultsResponse getQueryResultsWithRowLimitSkipExceptionTranslati
18351859 "JobService" ,
18361860 "GetQueryResults" ,
18371861 gcpResourceDestinationId ,
1838- null ),
1862+ null ,
1863+ queryRequest .getUriTemplate ()),
18391864 span -> {
18401865 if (span != null ) {
18411866 span .setAttribute ("bq.rpc.page_token" , queryRequest .getPageToken ());
@@ -1875,7 +1900,7 @@ public QueryResponse queryRpcSkipExceptionTranslation(String projectId, QueryReq
18751900 "JobService" ,
18761901 "Query" ,
18771902 gcpResourceDestinationId ,
1878- null ),
1903+ null , queryRequest . getUriTemplate () ),
18791904 span -> {
18801905 return queryRequest .execute ();
18811906 });
@@ -2006,7 +2031,8 @@ public Policy getIamPolicySkipExceptionTranslation(String resourceId, Map<Option
20062031 "TableService" ,
20072032 "GetIamPolicy" ,
20082033 gcpResourceDestinationId ,
2009- options ),
2034+ options ,
2035+ bqGetRequest .getUriTemplate ()),
20102036 span -> {
20112037 return bqGetRequest .execute ();
20122038 });
@@ -2042,7 +2068,8 @@ public Policy setIamPolicySkipExceptionTranslation(
20422068 "TableService" ,
20432069 "SetIamPolicy" ,
20442070 gcpResourceDestinationId ,
2045- options ),
2071+ options ,
2072+ bqSetRequest .getUriTemplate ()),
20462073 span -> {
20472074 return bqSetRequest .execute ();
20482075 });
@@ -2079,7 +2106,8 @@ public TestIamPermissionsResponse testIamPermissionsSkipExceptionTranslation(
20792106 "TableService" ,
20802107 "TestIamPermissions" ,
20812108 gcpResourceDestinationId ,
2082- options ),
2109+ options ,
2110+ bqTestRequest .getUriTemplate ()),
20832111 span -> {
20842112 return bqTestRequest .execute ();
20852113 });
@@ -2089,13 +2117,15 @@ public TestIamPermissionsResponse testIamPermissionsSkipExceptionTranslation(
20892117 * Helper method to create an OpenTelemetry tracer span with common rpc trace attributes.
20902118 *
20912119 * <p>If isOpenTelemetryTracingEnabled == true creates and returns span, otherwise returns null.
2120+ *
2121+ * @param urlTemplate The URI template for the request, or null if unavailable
20922122 */
20932123 private Span createRpcTracingSpan (
20942124 String spanName ,
20952125 String service ,
20962126 String method ,
20972127 String gcpResourceDestinationId ,
2098- Map <Option , ?> options ) {
2128+ Map <Option , ?> options , String urlTemplate ) {
20992129 if (!this .options .isOpenTelemetryTracingEnabled ()
21002130 || this .options .getOpenTelemetryTracer () == null ) {
21012131 return null ;
@@ -2116,6 +2146,11 @@ private Span createRpcTracingSpan(
21162146 builder .setAllAttributes (otelAttributesFromOptions (options ));
21172147 }
21182148
2149+ // Set url.template attribute if available
2150+ if (urlTemplate != null && !urlTemplate .isEmpty ()) {
2151+ builder .setAttribute ("url.template" , urlTemplate );
2152+ }
2153+
21192154 return builder .startSpan ();
21202155 }
21212156
0 commit comments