Skip to content

Commit 15dc9f0

Browse files
author
Praful Makani
authored
fix: request id for fast query path (#781)
1 parent 1778e74 commit 15dc9f0

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryJobConfiguration.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.List;
3636
import java.util.Map;
3737
import java.util.Objects;
38+
import java.util.UUID;
3839

3940
/**
4041
* Google BigQuery Query Job configuration. A Query Job runs a query against BigQuery data. Query
@@ -71,6 +72,7 @@ public final class QueryJobConfiguration extends JobConfiguration {
7172
private final List<ConnectionProperty> connectionProperties;
7273
// maxResults is only used for fast query path
7374
private final Long maxResults;
75+
private final String requestId;
7476

7577
/**
7678
* Priority levels for a query. If not specified the priority is assumed to be {@link
@@ -121,6 +123,7 @@ public static final class Builder
121123
private RangePartitioning rangePartitioning;
122124
private List<ConnectionProperty> connectionProperties;
123125
private Long maxResults;
126+
private String requestId;
124127

125128
private Builder() {
126129
super(Type.QUERY);
@@ -154,6 +157,7 @@ private Builder(QueryJobConfiguration jobConfiguration) {
154157
this.rangePartitioning = jobConfiguration.rangePartitioning;
155158
this.connectionProperties = jobConfiguration.connectionProperties;
156159
this.maxResults = jobConfiguration.maxResults;
160+
this.requestId = jobConfiguration.requestId;
157161
}
158162

159163
private Builder(com.google.api.services.bigquery.model.JobConfiguration configurationPb) {
@@ -621,6 +625,11 @@ public Builder setMaxResults(Long maxResults) {
621625
return this;
622626
}
623627

628+
Builder setRequestId(String requestId) {
629+
this.requestId = requestId;
630+
return this;
631+
}
632+
624633
public QueryJobConfiguration build() {
625634
return new QueryJobConfiguration(this);
626635
}
@@ -663,6 +672,7 @@ private QueryJobConfiguration(Builder builder) {
663672
this.rangePartitioning = builder.rangePartitioning;
664673
this.connectionProperties = builder.connectionProperties;
665674
this.maxResults = builder.maxResults;
675+
this.requestId = builder.requestId;
666676
}
667677

668678
/**
@@ -865,6 +875,10 @@ public Long getMaxResults() {
865875
return maxResults;
866876
}
867877

878+
String getRequestId() {
879+
return requestId;
880+
}
881+
868882
@Override
869883
public Builder toBuilder() {
870884
return new Builder(this);
@@ -1043,7 +1057,7 @@ com.google.api.services.bigquery.model.JobConfiguration toPb() {
10431057
/** Creates a builder for a BigQuery Query Job given the query to be run. */
10441058
public static Builder newBuilder(String query) {
10451059
checkArgument(!isNullOrEmpty(query), "Provided query is null or empty");
1046-
return new Builder().setQuery(query);
1060+
return new Builder().setQuery(query).setRequestId(UUID.randomUUID().toString());
10471061
}
10481062

10491063
/**

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryRequestInfo.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@
2323
import com.google.common.collect.Lists;
2424
import java.util.List;
2525
import java.util.Map;
26-
import java.util.UUID;
2726

2827
final class QueryRequestInfo {
2928

30-
private static final String REQUEST_ID = UUID.randomUUID().toString();
3129
private QueryJobConfiguration config;
3230
private final List<ConnectionProperty> connectionProperties;
3331
private final DatasetId defaultDataset;
@@ -39,6 +37,7 @@ final class QueryRequestInfo {
3937
private final List<QueryParameter> queryParameters;
4038
private final Boolean useQueryCache;
4139
private final Boolean useLegacySql;
40+
private final String requestId;
4241

4342
QueryRequestInfo(QueryJobConfiguration config) {
4443
this.config = config;
@@ -52,6 +51,7 @@ final class QueryRequestInfo {
5251
this.queryParameters = config.toPb().getQuery().getQueryParameters();
5352
this.useLegacySql = config.useLegacySql();
5453
this.useQueryCache = config.useQueryCache();
54+
this.requestId = config.getRequestId();
5555
}
5656

5757
boolean isFastQuerySupported() {
@@ -92,7 +92,7 @@ QueryRequest toPb() {
9292
request.setMaxResults(maxResults);
9393
}
9494
request.setQuery(query);
95-
request.setRequestId(REQUEST_ID);
95+
request.setRequestId(requestId);
9696
if (queryParameters != null) {
9797
request.setQueryParameters(queryParameters);
9898
}
@@ -115,7 +115,7 @@ public String toString() {
115115
.add("maximumBytesBilled", maximumBytesBilled)
116116
.add("maxResults", maxResults)
117117
.add("query", query)
118-
.add("requestId", REQUEST_ID)
118+
.add("requestId", requestId)
119119
.add("queryParameters", queryParameters)
120120
.add("useQueryCache", useQueryCache)
121121
.add("useLegacySql", useLegacySql)
@@ -133,7 +133,7 @@ public int hashCode() {
133133
maxResults,
134134
query,
135135
queryParameters,
136-
REQUEST_ID,
136+
requestId,
137137
useQueryCache,
138138
useLegacySql);
139139
}

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,6 +1560,29 @@ public void testQueryCaseInsensitiveSchemaFieldByGetName() throws InterruptedExc
15601560
assertEquals(2, rowCount);
15611561
}
15621562

1563+
@Test
1564+
public void testFastQueryMultipleRuns() throws InterruptedException {
1565+
String query =
1566+
"SELECT TimestampField, StringField, BooleanField FROM " + TABLE_ID_FASTQUERY.getTable();
1567+
QueryJobConfiguration config =
1568+
QueryJobConfiguration.newBuilder(query).setDefaultDataset(DatasetId.of(DATASET)).build();
1569+
TableResult result = bigquery.query(config);
1570+
assertEquals(QUERY_RESULT_SCHEMA, result.getSchema());
1571+
assertEquals(2, result.getTotalRows());
1572+
assertNull(result.getNextPage());
1573+
assertNull(result.getNextPageToken());
1574+
assertFalse(result.hasNextPage());
1575+
1576+
QueryJobConfiguration config2 =
1577+
QueryJobConfiguration.newBuilder(query).setDefaultDataset(DatasetId.of(DATASET)).build();
1578+
TableResult result2 = bigquery.query(config2);
1579+
assertEquals(QUERY_RESULT_SCHEMA, result2.getSchema());
1580+
assertEquals(2, result2.getTotalRows());
1581+
assertNull(result2.getNextPage());
1582+
assertNull(result2.getNextPageToken());
1583+
assertFalse(result2.hasNextPage());
1584+
}
1585+
15631586
@Test
15641587
public void testFastSQLQuery() throws InterruptedException {
15651588
String query =

0 commit comments

Comments
 (0)