|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- // Copyright 2019 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // https://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // Code generated by gapic-generator. DO NOT EDIT.
-
- package storage
-
- import (
- "context"
- "fmt"
- "time"
-
- gax "github.com/googleapis/gax-go/v2"
- "google.golang.org/api/option"
- "google.golang.org/api/transport"
- storagepb "google.golang.org/genproto/googleapis/cloud/bigquery/storage/v1beta1"
- "google.golang.org/grpc"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/metadata"
- )
-
- // BigQueryStorageCallOptions contains the retry settings for each method of BigQueryStorageClient.
- type BigQueryStorageCallOptions struct {
- CreateReadSession []gax.CallOption
- ReadRows []gax.CallOption
- BatchCreateReadSessionStreams []gax.CallOption
- FinalizeStream []gax.CallOption
- SplitReadStream []gax.CallOption
- }
-
- func defaultBigQueryStorageClientOptions() []option.ClientOption {
- return []option.ClientOption{
- option.WithEndpoint("bigquerystorage.googleapis.com:443"),
- option.WithScopes(DefaultAuthScopes()...),
- }
- }
-
- func defaultBigQueryStorageCallOptions() *BigQueryStorageCallOptions {
- retry := map[[2]string][]gax.CallOption{
- {"default", "idempotent"}: {
- gax.WithRetry(func() gax.Retryer {
- return gax.OnCodes([]codes.Code{
- codes.DeadlineExceeded,
- codes.Unavailable,
- }, gax.Backoff{
- Initial: 100 * time.Millisecond,
- Max: 60000 * time.Millisecond,
- Multiplier: 1.3,
- })
- }),
- },
- }
- return &BigQueryStorageCallOptions{
- CreateReadSession: retry[[2]string{"default", "idempotent"}],
- ReadRows: retry[[2]string{"default", "idempotent"}],
- BatchCreateReadSessionStreams: retry[[2]string{"default", "idempotent"}],
- FinalizeStream: retry[[2]string{"default", "idempotent"}],
- SplitReadStream: retry[[2]string{"default", "idempotent"}],
- }
- }
-
- // BigQueryStorageClient is a client for interacting with BigQuery Storage API.
- //
- // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
- type BigQueryStorageClient struct {
- // The connection to the service.
- conn *grpc.ClientConn
-
- // The gRPC API client.
- bigQueryStorageClient storagepb.BigQueryStorageClient
-
- // The call options for this service.
- CallOptions *BigQueryStorageCallOptions
-
- // The x-goog-* metadata to be sent with each request.
- xGoogMetadata metadata.MD
- }
-
- // NewBigQueryStorageClient creates a new big query storage client.
- //
- // BigQuery storage API.
- //
- // The BigQuery storage API can be used to read data stored in BigQuery.
- func NewBigQueryStorageClient(ctx context.Context, opts ...option.ClientOption) (*BigQueryStorageClient, error) {
- conn, err := transport.DialGRPC(ctx, append(defaultBigQueryStorageClientOptions(), opts...)...)
- if err != nil {
- return nil, err
- }
- c := &BigQueryStorageClient{
- conn: conn,
- CallOptions: defaultBigQueryStorageCallOptions(),
-
- bigQueryStorageClient: storagepb.NewBigQueryStorageClient(conn),
- }
- c.setGoogleClientInfo()
- return c, nil
- }
-
- // Connection returns the client's connection to the API service.
- func (c *BigQueryStorageClient) Connection() *grpc.ClientConn {
- return c.conn
- }
-
- // Close closes the connection to the API service. The user should invoke this when
- // the client is no longer required.
- func (c *BigQueryStorageClient) Close() error {
- return c.conn.Close()
- }
-
- // setGoogleClientInfo sets the name and version of the application in
- // the `x-goog-api-client` header passed on each request. Intended for
- // use by Google-written clients.
- func (c *BigQueryStorageClient) setGoogleClientInfo(keyval ...string) {
- kv := append([]string{"gl-go", versionGo()}, keyval...)
- kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
- c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
- }
-
- // CreateReadSession creates a new read session. A read session divides the contents of a
- // BigQuery table into one or more streams, which can then be used to read
- // data from the table. The read session also specifies properties of the
- // data to be read, such as a list of columns or a push-down filter describing
- // the rows to be returned.
- //
- // A particular row can be read by at most one stream. When the caller has
- // reached the end of each stream in the session, then all the data in the
- // table has been read.
- //
- // Read sessions automatically expire 24 hours after they are created and do
- // not require manual clean-up by the caller.
- func (c *BigQueryStorageClient) CreateReadSession(ctx context.Context, req *storagepb.CreateReadSessionRequest, opts ...gax.CallOption) (*storagepb.ReadSession, error) {
- md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v&%s=%v", "table_reference.project_id", req.GetTableReference().GetProjectId(), "table_reference.dataset_id", req.GetTableReference().GetDatasetId()))
- ctx = insertMetadata(ctx, c.xGoogMetadata, md)
- opts = append(c.CallOptions.CreateReadSession[0:len(c.CallOptions.CreateReadSession):len(c.CallOptions.CreateReadSession)], opts...)
- var resp *storagepb.ReadSession
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- resp, err = c.bigQueryStorageClient.CreateReadSession(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- if err != nil {
- return nil, err
- }
- return resp, nil
- }
-
- // ReadRows reads rows from the table in the format prescribed by the read session.
- // Each response contains one or more table rows, up to a maximum of 10 MiB
- // per response; read requests which attempt to read individual rows larger
- // than this will fail.
- //
- // Each request also returns a set of stream statistics reflecting the
- // estimated total number of rows in the read stream. This number is computed
- // based on the total table size and the number of active streams in the read
- // session, and may change as other streams continue to read data.
- func (c *BigQueryStorageClient) ReadRows(ctx context.Context, req *storagepb.ReadRowsRequest, opts ...gax.CallOption) (storagepb.BigQueryStorage_ReadRowsClient, error) {
- md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "read_position.stream.name", req.GetReadPosition().GetStream().GetName()))
- ctx = insertMetadata(ctx, c.xGoogMetadata, md)
- opts = append(c.CallOptions.ReadRows[0:len(c.CallOptions.ReadRows):len(c.CallOptions.ReadRows)], opts...)
- var resp storagepb.BigQueryStorage_ReadRowsClient
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- resp, err = c.bigQueryStorageClient.ReadRows(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- if err != nil {
- return nil, err
- }
- return resp, nil
- }
-
- // BatchCreateReadSessionStreams creates additional streams for a ReadSession. This API can be used to
- // dynamically adjust the parallelism of a batch processing task upwards by
- // adding additional workers.
- func (c *BigQueryStorageClient) BatchCreateReadSessionStreams(ctx context.Context, req *storagepb.BatchCreateReadSessionStreamsRequest, opts ...gax.CallOption) (*storagepb.BatchCreateReadSessionStreamsResponse, error) {
- md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "session.name", req.GetSession().GetName()))
- ctx = insertMetadata(ctx, c.xGoogMetadata, md)
- opts = append(c.CallOptions.BatchCreateReadSessionStreams[0:len(c.CallOptions.BatchCreateReadSessionStreams):len(c.CallOptions.BatchCreateReadSessionStreams)], opts...)
- var resp *storagepb.BatchCreateReadSessionStreamsResponse
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- resp, err = c.bigQueryStorageClient.BatchCreateReadSessionStreams(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- if err != nil {
- return nil, err
- }
- return resp, nil
- }
-
- // FinalizeStream triggers the graceful termination of a single stream in a ReadSession. This
- // API can be used to dynamically adjust the parallelism of a batch processing
- // task downwards without losing data.
- //
- // This API does not delete the stream -- it remains visible in the
- // ReadSession, and any data processed by the stream is not released to other
- // streams. However, no additional data will be assigned to the stream once
- // this call completes. Callers must continue reading data on the stream until
- // the end of the stream is reached so that data which has already been
- // assigned to the stream will be processed.
- //
- // This method will return an error if there are no other live streams
- // in the Session, or if SplitReadStream() has been called on the given
- // Stream.
- func (c *BigQueryStorageClient) FinalizeStream(ctx context.Context, req *storagepb.FinalizeStreamRequest, opts ...gax.CallOption) error {
- md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "stream.name", req.GetStream().GetName()))
- ctx = insertMetadata(ctx, c.xGoogMetadata, md)
- opts = append(c.CallOptions.FinalizeStream[0:len(c.CallOptions.FinalizeStream):len(c.CallOptions.FinalizeStream)], opts...)
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- _, err = c.bigQueryStorageClient.FinalizeStream(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- return err
- }
-
- // SplitReadStream splits a given read stream into two Streams. These streams are referred to
- // as the primary and the residual of the split. The original stream can still
- // be read from in the same manner as before. Both of the returned streams can
- // also be read from, and the total rows return by both child streams will be
- // the same as the rows read from the original stream.
- //
- // Moreover, the two child streams will be allocated back to back in the
- // original Stream. Concretely, it is guaranteed that for streams Original,
- // Primary, and Residual, that Original[0-j] = Primary[0-j] and
- // Original[j-n] = Residual[0-m] once the streams have been read to
- // completion.
- //
- // This method is guaranteed to be idempotent.
- func (c *BigQueryStorageClient) SplitReadStream(ctx context.Context, req *storagepb.SplitReadStreamRequest, opts ...gax.CallOption) (*storagepb.SplitReadStreamResponse, error) {
- md := metadata.Pairs("x-goog-request-params", fmt.Sprintf("%s=%v", "original_stream.name", req.GetOriginalStream().GetName()))
- ctx = insertMetadata(ctx, c.xGoogMetadata, md)
- opts = append(c.CallOptions.SplitReadStream[0:len(c.CallOptions.SplitReadStream):len(c.CallOptions.SplitReadStream)], opts...)
- var resp *storagepb.SplitReadStreamResponse
- err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
- var err error
- resp, err = c.bigQueryStorageClient.SplitReadStream(ctx, req, settings.GRPC...)
- return err
- }, opts...)
- if err != nil {
- return nil, err
- }
- return resp, nil
- }
|