Skip to content

Commit cacf65e

Browse files
Adding BigQuery snippet for QueryParameters (#1455)
1 parent 0838c41 commit cacf65e

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,30 @@ Page<List<FieldValue>> listTableData(String datasetId, String tableId,
972972
* }
973973
* }</pre>
974974
*
975+
* <p>Example of running a query with query parameters.
976+
* <pre> {@code
977+
* String query = "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > ?";
978+
* QueryRequest request = QueryRequest.newBuilder(query)
979+
* .setUseLegacySql(false) // standard SQL is required to use query parameters
980+
* .addPositionalParameter(QueryParameterValue.int64(5))
981+
* .build();
982+
* QueryResponse response = bigquery.query(request);
983+
* // Wait for things to finish
984+
* while (!response.jobCompleted()) {
985+
* Thread.sleep(1000);
986+
* response = bigquery.getQueryResults(response.getJobId());
987+
* }
988+
* if (response.hasErrors()) {
989+
* // handle errors
990+
* }
991+
* QueryResult result = response.getResult();
992+
* Iterator<List<FieldValue>> rowIterator = result.iterateAll();
993+
* while (rowIterator.hasNext()) {
994+
* List<FieldValue> row = rowIterator.next();
995+
* // do something with the data
996+
* }
997+
* }</pre>
998+
*
975999
* @throws BigQueryException upon failure
9761000
*/
9771001
QueryResponse query(QueryRequest request);

google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/BigQuerySnippets.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import com.google.cloud.bigquery.JobInfo;
4747
import com.google.cloud.bigquery.JobStatistics.LoadStatistics;
4848
import com.google.cloud.bigquery.QueryJobConfiguration;
49+
import com.google.cloud.bigquery.QueryParameterValue;
4950
import com.google.cloud.bigquery.QueryRequest;
5051
import com.google.cloud.bigquery.QueryResponse;
5152
import com.google.cloud.bigquery.QueryResult;
@@ -609,6 +610,36 @@ public QueryResponse runQuery(String query) throws InterruptedException {
609610
return response;
610611
}
611612

613+
/**
614+
* Example of running a query with query parameters.
615+
*/
616+
// [TARGET query(QueryRequest)]
617+
// [VARIABLE "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > @wordCount"]
618+
public QueryResponse runQueryWithParameters(String query) throws InterruptedException {
619+
// [START runQueryWithParameters]
620+
QueryRequest request = QueryRequest.newBuilder(query)
621+
.setUseLegacySql(false) // standard SQL is required to use query parameters
622+
.addNamedParameter("wordCount", QueryParameterValue.int64(5))
623+
.build();
624+
QueryResponse response = bigquery.query(request);
625+
// Wait for things to finish
626+
while (!response.jobCompleted()) {
627+
Thread.sleep(1000);
628+
response = bigquery.getQueryResults(response.getJobId());
629+
}
630+
if (response.hasErrors()) {
631+
// handle errors
632+
}
633+
QueryResult result = response.getResult();
634+
Iterator<List<FieldValue>> rowIterator = result.iterateAll();
635+
while (rowIterator.hasNext()) {
636+
List<FieldValue> row = rowIterator.next();
637+
// do something with the data
638+
}
639+
// [END runQueryWithParameters]
640+
return response;
641+
}
642+
612643
/**
613644
* Example of getting the results of query.
614645
*/

google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITBigQuerySnippets.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ public class ITBigQuerySnippets {
7373
private static final String OTHER_DATASET = RemoteBigQueryHelper.generateDatasetName();
7474
private static final String QUERY =
7575
"SELECT unique(corpus) FROM [bigquery-public-data:samples.shakespeare]";
76+
private static final String QUERY_WITH_PARAMETERS =
77+
"SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > @wordCount";
7678
private static final Function<Job, JobId> TO_JOB_ID_FUNCTION = new Function<Job, JobId>() {
7779
@Override
7880
public JobId apply(Job job) {
@@ -271,4 +273,15 @@ public void testRunQuery() throws InterruptedException {
271273
assertNotNull(result);
272274
assertTrue(bigquerySnippets.cancelJobFromId(queryResponse.getJobId().getJob()));
273275
}
276+
277+
@Test
278+
public void testRunQueryWithParameters() throws InterruptedException {
279+
QueryResponse queryResponse = bigquerySnippets.runQueryWithParameters(QUERY_WITH_PARAMETERS);
280+
assertNotNull(queryResponse);
281+
assertTrue(queryResponse.jobCompleted());
282+
assertFalse(queryResponse.hasErrors());
283+
QueryResult result = queryResponse.getResult();
284+
assertNotNull(result);
285+
assertTrue(bigquerySnippets.cancelJob(queryResponse.getJobId().getJob()));
286+
}
274287
}

0 commit comments

Comments
 (0)