Query pagination

Run a query and get rows using automatic pagination.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

Java

Before trying this sample, follow the Java setup instructions in the BigQuery quickstart using client libraries . For more information, see the BigQuery Java API reference documentation .

To authenticate to BigQuery, set up Application Default Credentials. For more information, see Set up authentication for client libraries .

  import 
  
 com.google.cloud.bigquery. BigQuery 
 
 ; 
 import 
  
 com.google.cloud.bigquery. BigQueryException 
 
 ; 
 import 
  
 com.google.cloud.bigquery. BigQueryOptions 
 
 ; 
 import 
  
 com.google.cloud.bigquery. QueryJobConfiguration 
 
 ; 
 import 
  
 com.google.cloud.bigquery. TableId 
 
 ; 
 import 
  
 com.google.cloud.bigquery. TableResult 
 
 ; 
 // Sample to run query with pagination. 
 public 
  
 class 
 QueryPagination 
  
 { 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 { 
  
 String 
  
 datasetName 
  
 = 
  
 "MY_DATASET_NAME" 
 ; 
  
 String 
  
 tableName 
  
 = 
  
 "MY_TABLE_NAME" 
 ; 
  
 String 
  
 query 
  
 = 
  
 "SELECT name, SUM(number) as total_people" 
  
 + 
  
 " FROM `bigquery-public-data.usa_names.usa_1910_2013`" 
  
 + 
  
 " GROUP BY name" 
  
 + 
  
 " ORDER BY total_people DESC" 
  
 + 
  
 " LIMIT 100" 
 ; 
  
 queryPagination 
 ( 
 datasetName 
 , 
  
 tableName 
 , 
  
 query 
 ); 
  
 } 
  
 public 
  
 static 
  
 void 
  
 queryPagination 
 ( 
 String 
  
 datasetName 
 , 
  
 String 
  
 tableName 
 , 
  
 String 
  
 query 
 ) 
  
 { 
  
 try 
  
 { 
  
 // Initialize client that will be used to send requests. This client only needs to be created 
  
 // once, and can be reused for multiple requests. 
  
  BigQuery 
 
  
 bigquery 
  
 = 
  
  BigQueryOptions 
 
 . 
 getDefaultInstance 
 (). 
 getService 
 (); 
  
  TableId 
 
  
 tableId 
  
 = 
  
  TableId 
 
 . 
 of 
 ( 
 datasetName 
 , 
  
 tableName 
 ); 
  
  QueryJobConfiguration 
 
  
 queryConfig 
  
 = 
  
  QueryJobConfiguration 
 
 . 
 newBuilder 
 ( 
 query 
 ) 
  
 // save results into a table. 
  
 . 
 setDestinationTable 
 ( 
 tableId 
 ) 
  
 . 
 build 
 (); 
  
 bigquery 
 . 
  query 
 
 ( 
 queryConfig 
 ); 
  
  TableResult 
 
  
 results 
  
 = 
  
 bigquery 
 . 
  listTableData 
 
 ( 
 tableId 
 , 
  
 BigQuery 
 . 
 TableDataListOption 
 . 
 pageSize 
 ( 
 20 
 )); 
  
 // First Page 
  
 results 
  
 . 
 getValues 
 () 
  
 . 
 forEach 
 ( 
 row 
  
 - 
>  
 row 
 . 
 forEach 
 ( 
 val 
  
 - 
>  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "%s,\n" 
 , 
  
 val 
 . 
 toString 
 ()))); 
  
 while 
  
 ( 
 results 
 . 
  hasNextPage 
 
 ()) 
  
 { 
  
 // Remaining Pages 
  
 results 
  
 = 
  
 results 
 . 
  getNextPage 
 
 (); 
  
 results 
  
 . 
 getValues 
 () 
  
 . 
 forEach 
 ( 
 row 
  
 - 
>  
 row 
 . 
 forEach 
 ( 
 val 
  
 - 
>  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "%s,\n" 
 , 
  
 val 
 . 
 toString 
 ()))); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Query pagination performed successfully." 
 ); 
  
 } 
  
 catch 
  
 ( 
  BigQueryException 
 
  
 | 
  
 InterruptedException 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Query not performed \n" 
  
 + 
  
 e 
 . 
 toString 
 ()); 
  
 } 
  
 } 
 } 
 

Node.js

Before trying this sample, follow the Node.js setup instructions in the BigQuery quickstart using client libraries . For more information, see the BigQuery Node.js API reference documentation .

To authenticate to BigQuery, set up Application Default Credentials. For more information, see Set up authentication for client libraries .

  // Import the Google Cloud client library using default credentials 
 const 
  
 { 
 BigQuery 
 } 
  
 = 
  
 require 
 ( 
 ' @google-cloud/bigquery 
' 
 ); 
 const 
  
 bigquery 
  
 = 
  
 new 
  
  BigQuery 
 
 (); 
 async 
  
 function 
  
 queryPagination 
 () 
  
 { 
  
 // Run a query and get rows using automatic pagination. 
  
 const 
  
 query 
  
 = 
  
 `SELECT name, SUM(number) as total_people 
 FROM \`bigquery-public-data.usa_names.usa_1910_2013\` 
 GROUP BY name 
 ORDER BY total_people DESC 
 LIMIT 100` 
 ; 
  
 // Run the query as a job. 
  
 const 
  
 [ 
 job 
 ] 
  
 = 
  
 await 
  
 bigquery 
 . 
 createQueryJob 
 ( 
 query 
 ); 
  
 // Wait for job to complete and get rows. 
  
 // The client library automatically handles pagination. 
  
 // See more info on how to configure paging calls at: 
  
 //  * https://github.com/googleapis/gax-nodejs/blob/main/client-libraries.md#auto-pagination 
  
 //  * https://cloud.google.com/bigquery/docs/paging-results#iterate_through_client_libraries_results 
  
 const 
  
 [ 
 rows 
 ] 
  
 = 
  
 await 
  
  job 
 
 . 
  getQueryResults 
 
 (); 
  
 console 
 . 
 log 
 ( 
 'Query results:' 
 ); 
  
 rows 
 . 
 forEach 
 ( 
 row 
  
 = 
>  
 { 
  
 console 
 . 
 log 
 ( 
 `name: 
 ${ 
 row 
 . 
 name 
 } 
 , 
 ${ 
 row 
 . 
 total_people 
 } 
 total people` 
 ); 
  
 }); 
 } 
 queryPagination 
 (); 
 

Python

Before trying this sample, follow the Python setup instructions in the BigQuery quickstart using client libraries . For more information, see the BigQuery Python API reference documentation .

To authenticate to BigQuery, set up Application Default Credentials. For more information, see Set up authentication for client libraries .

  from 
  
 google.cloud 
  
 import 
  bigquery 
 
 # Construct a BigQuery client object. 
 client 
 = 
  bigquery 
 
 . 
  Client 
 
 () 
 query 
 = 
 """ 
 SELECT name, SUM(number) as total_people 
 FROM `bigquery-public-data.usa_names.usa_1910_2013` 
 GROUP BY name 
 ORDER BY total_people DESC 
 """ 
 query_job 
 = 
 client 
 . 
  query 
 
 ( 
 query 
 ) 
 # Make an API request. 
  query_job 
 
 . 
 result 
 () 
 # Wait for the query to complete. 
 # Get the destination table for the query results. 
 # 
 # All queries write to a destination table. If a destination table is not 
 # specified, the BigQuery populates it with a reference to a temporary 
 # anonymous table after the query completes. 
 destination 
 = 
  query_job 
 
 . 
 destination 
 # Get the schema (and other properties) for the destination table. 
 # 
 # A schema is useful for converting from BigQuery types to Python types. 
 destination 
 = 
 client 
 . 
  get_table 
 
 ( 
 destination 
 ) 
 # Download rows. 
 # 
 # The client library automatically handles pagination. 
 print 
 ( 
 "The query data:" 
 ) 
 rows 
 = 
 client 
 . 
  list_rows 
 
 ( 
 destination 
 , 
 max_results 
 = 
 20 
 ) 
 for 
 row 
 in 
 rows 
 : 
 print 
 ( 
 "name= 
 {} 
 , count= 
 {} 
 " 
 . 
 format 
 ( 
 row 
 [ 
 "name" 
 ], 
 row 
 [ 
 "total_people" 
 ])) 
 

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .

Create a Mobile Website
View Site in Mobile | Classic
Share by: