This guide shows how to migrate Java code using the BigQuery Storage API from
version v1beta1 to v1.
- Service Client:
BigQueryStorageClientis replaced byBigQueryReadClient. - Table Reference:
TableReferenceproto message is replaced by a simple string representation of the table path inReadSession. - Session Configuration: Several fields from
CreateReadSessionRequesthave moved intoReadSession(which is now passed as a field in the request). - Parallelism:
requested_streamsis replaced bymax_stream_count. - Sharding Strategy:
sharding_strategyis removed. The server now automatically balances the streams. - Read Rows Request:
StreamPositionis flattened. You now pass the stream name directly asread_streamand theoffsetas a top-level field inReadRowsRequest.
v1beta1:
import com.google.cloud.bigquery.storage.v1beta1.BigQueryStorageClient;
try (BigQueryStorageClient client = BigQueryStorageClient.create()) {
// use client
}v1:
import com.google.cloud.bigquery.storage.v1.BigQueryReadClient;
try (BigQueryReadClient client = BigQueryReadClient.create()) {
// use client
}v1beta1:
import com.google.cloud.bigquery.storage.v1beta1.BigQueryStorageClient;
import com.google.cloud.bigquery.storage.v1beta1.Storage.CreateReadSessionRequest;
import com.google.cloud.bigquery.storage.v1beta1.Storage.DataFormat;
import com.google.cloud.bigquery.storage.v1beta1.Storage.ReadSession;
import com.google.cloud.bigquery.storage.v1beta1.Storage.ShardingStrategy;
import com.google.cloud.bigquery.storage.v1beta1.ReadOptions.TableReadOptions;
import com.google.cloud.bigquery.storage.v1beta1.TableReferenceProto.TableReference;
// ...
TableReference tableReference = TableReference.newBuilder()
.setProjectId("bigquery-public-data")
.setDatasetId("usa_names")
.setTableId("usa_1910_current")
.build();
TableReadOptions options = TableReadOptions.newBuilder()
.addSelectedFields("name")
.setRowRestriction("state = \"WA\"")
.build();
CreateReadSessionRequest request = CreateReadSessionRequest.newBuilder()
.setParent("projects/read-session-project")
.setTableReference(tableReference)
.setReadOptions(options)
.setRequestedStreams(1)
.setFormat(DataFormat.AVRO)
.setShardingStrategy(ShardingStrategy.LIQUID)
.build();
ReadSession session = client.createReadSession(request);v1:
import com.google.cloud.bigquery.storage.v1.BigQueryReadClient;
import com.google.cloud.bigquery.storage.v1.CreateReadSessionRequest;
import com.google.cloud.bigquery.storage.v1.DataFormat;
import com.google.cloud.bigquery.storage.v1.ReadSession;
import com.google.cloud.bigquery.storage.v1.ReadSession.TableReadOptions;
// ...
// Table path is now a string: projects/{project}/datasets/{dataset}/tables/{table}
String tablePath = "projects/bigquery-public-data/datasets/usa_names/tables/usa_1910_current";
TableReadOptions options = TableReadOptions.newBuilder()
.addSelectedFields("name")
.setRowRestriction("state = \"WA\"")
.build();
// ReadSession holds the session configuration (table, options, format)
ReadSession readSession = ReadSession.newBuilder()
.setTable(tablePath)
.setDataFormat(DataFormat.AVRO) // format renamed to data_format
.setReadOptions(options)
.build();
CreateReadSessionRequest request = CreateReadSessionRequest.newBuilder()
.setParent("projects/read-session-project")
.setReadSession(readSession)
.setMaxStreamCount(1) // requested_streams renamed to max_stream_count
.build();
ReadSession session = client.createReadSession(request);v1beta1:
import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.bigquery.storage.v1beta1.Storage.ReadRowsRequest;
import com.google.cloud.bigquery.storage.v1beta1.Storage.ReadRowsResponse;
import com.google.cloud.bigquery.storage.v1beta1.Storage.StreamPosition;
// ...
StreamPosition readPosition = StreamPosition.newBuilder()
.setStream(session.getStreams(0)) // Stream object
.setOffset(0)
.build();
ReadRowsRequest readRowsRequest = ReadRowsRequest.newBuilder()
.setReadPosition(readPosition)
.build();
ServerStream<ReadRowsResponse> stream = client.readRowsCallable().call(readRowsRequest);
for (ReadRowsResponse response : stream) {
// Process response.getAvroRows()
}v1:
import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.bigquery.storage.v1.ReadRowsRequest;
import com.google.cloud.bigquery.storage.v1.ReadRowsResponse;
// ...
// ReadRowsRequest is flattened. We pass the stream name (string) and offset directly.
ReadRowsRequest readRowsRequest = ReadRowsRequest.newBuilder()
.setReadStream(session.getStreams(0).getName()) // Stream name string
.setOffset(0)
.build();
ServerStream<ReadRowsResponse> stream = client.readRowsCallable().call(readRowsRequest);
for (ReadRowsResponse response : stream) {
// Process response.getAvroRows()
// Note: Prefer using response.getRowCount() over response.getAvroRows().getRowCount() (deprecated)
}