Class: Google::Cloud::Bigtable::V2::BigtableClient

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/bigtable/v2/bigtable_client.rb

Overview

Service for reading from and writing to existing Bigtable tables.

Constant Summary collapse

SERVICE_ADDRESS =

The default address of the service.

"bigtable.googleapis.com".freeze
DEFAULT_SERVICE_PORT =

The default port of the service.

443
GRPC_INTERCEPTORS =

The default set of gRPC interceptors.

[]
DEFAULT_TIMEOUT =
30
ALL_SCOPES =

The scopes needed to make gRPC calls to all of the methods defined in this service.

[
  "https://www.googleapis.com/auth/bigtable.data",
  "https://www.googleapis.com/auth/bigtable.data.readonly",
  "https://www.googleapis.com/auth/cloud-bigtable.data",
  "https://www.googleapis.com/auth/cloud-bigtable.data.readonly",
  "https://www.googleapis.com/auth/cloud-platform",
  "https://www.googleapis.com/auth/cloud-platform.read-only"
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(credentials: nil, scopes: ALL_SCOPES, client_config: {}, timeout: DEFAULT_TIMEOUT, metadata: nil, service_address: nil, service_port: nil, exception_transformer: nil, lib_name: nil, lib_version: "") ⇒ BigtableClient

Returns a new instance of BigtableClient.

Parameters:

  • credentials (Google::Auth::Credentials, String, Hash, GRPC::Core::Channel, GRPC::Core::ChannelCredentials, Proc) (defaults to: nil)

    Provides the means for authenticating requests made by the client. This parameter can be many types. A Google::Auth::Credentials uses a the properties of its represented keyfile for authenticating requests made by this client. A String will be treated as the path to the keyfile to be used for the construction of credentials for this client. A Hash will be treated as the contents of a keyfile to be used for the construction of credentials for this client. A GRPC::Core::Channel will be used to make calls through. A GRPC::Core::ChannelCredentials for the setting up the RPC client. The channel credentials should already be composed with a GRPC::Core::CallCredentials object. A Proc will be used as an updater_proc for the Grpc channel. The proc transforms the metadata for requests, generally, to give OAuth credentials.

  • scopes (Array<String>) (defaults to: ALL_SCOPES)

    The OAuth scopes for this service. This parameter is ignored if an updater_proc is supplied.

  • client_config (Hash) (defaults to: {})

    A Hash for call options for each method. See Google::Gax#construct_settings for the structure of this data. Falls back to the default config if not specified or the specified config is missing data points.

  • timeout (Numeric) (defaults to: DEFAULT_TIMEOUT)

    The default timeout, in seconds, for calls made through this client.

  • metadata (Hash) (defaults to: nil)

    Default metadata to be sent with each request. This can be overridden on a per call basis.

  • service_address (String) (defaults to: nil)

    Override for the service hostname, or nil to leave as the default.

  • service_port (Integer) (defaults to: nil)

    Override for the service port, or nil to leave as the default.

  • exception_transformer (Proc) (defaults to: nil)

    An optional proc that intercepts any exceptions raised during an API call to inject custom error handling.



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 119

def initialize \
    credentials: nil,
    scopes: ALL_SCOPES,
    client_config: {},
    timeout: DEFAULT_TIMEOUT,
    metadata: nil,
    service_address: nil,
    service_port: nil,
    exception_transformer: nil,
    lib_name: nil,
    lib_version: ""
  # These require statements are intentionally placed here to initialize
  # the gRPC module only when it's required.
  # See https://github.com/googleapis/toolkit/issues/446
  require "google/gax/grpc"
  require "google/bigtable/v2/bigtable_services_pb"

  credentials ||= Google::Cloud::Bigtable::V2::Credentials.default

  if credentials.is_a?(String) || credentials.is_a?(Hash)
    updater_proc = Google::Cloud::Bigtable::V2::Credentials.new(credentials).updater_proc
  end
  if credentials.is_a?(GRPC::Core::Channel)
    channel = credentials
  end
  if credentials.is_a?(GRPC::Core::ChannelCredentials)
    chan_creds = credentials
  end
  if credentials.is_a?(Proc)
    updater_proc = credentials
  end
  if credentials.is_a?(Google::Auth::Credentials)
    updater_proc = credentials.updater_proc
  end

  package_version = Google::Cloud::Bigtable::VERSION

  google_api_client = "gl-ruby/#{RUBY_VERSION}"
  google_api_client << " #{lib_name}/#{lib_version}" if lib_name
  google_api_client << " gapic/#{package_version} gax/#{Google::Gax::VERSION}"
  google_api_client << " grpc/#{GRPC::VERSION}"
  google_api_client.freeze

  headers = { :"x-goog-api-client" => google_api_client }
  if credentials.respond_to?(:quota_project_id) && credentials.quota_project_id
    headers[:"x-goog-user-project"] = credentials.quota_project_id
  end
  headers.merge!() unless .nil?
  client_config_file = Pathname.new(__dir__).join(
    "bigtable_client_config.json"
  )
  defaults = client_config_file.open do |f|
    Google::Gax.construct_settings(
      "google.bigtable.v2.Bigtable",
      JSON.parse(f.read),
      client_config,
      Google::Gax::Grpc::STATUS_CODE_NAMES,
      timeout,
      errors: Google::Gax::Grpc::API_ERRORS,
      metadata: headers
    )
  end

  # Allow overriding the service path/port in subclasses.
  service_path = service_address || self.class::SERVICE_ADDRESS
  port = service_port || self.class::DEFAULT_SERVICE_PORT
  interceptors = self.class::GRPC_INTERCEPTORS
  @bigtable_stub = Google::Gax::Grpc.create_stub(
    service_path,
    port,
    chan_creds: chan_creds,
    channel: channel,
    updater_proc: updater_proc,
    scopes: scopes,
    interceptors: interceptors,
    &Google::Bigtable::V2::Bigtable::Stub.method(:new)
  )

  @read_rows = Google::Gax.create_api_call(
    @bigtable_stub.method(:read_rows),
    defaults["read_rows"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
  @sample_row_keys = Google::Gax.create_api_call(
    @bigtable_stub.method(:sample_row_keys),
    defaults["sample_row_keys"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
  @mutate_row = Google::Gax.create_api_call(
    @bigtable_stub.method(:mutate_row),
    defaults["mutate_row"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
  @mutate_rows = Google::Gax.create_api_call(
    @bigtable_stub.method(:mutate_rows),
    defaults["mutate_rows"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
  @check_and_mutate_row = Google::Gax.create_api_call(
    @bigtable_stub.method(:check_and_mutate_row),
    defaults["check_and_mutate_row"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
  @read_modify_write_row = Google::Gax.create_api_call(
    @bigtable_stub.method(:read_modify_write_row),
    defaults["read_modify_write_row"],
    exception_transformer: exception_transformer,
    params_extractor: proc do |request|
      {'table_name' => request.table_name}
    end
  )
end

Class Method Details

.table_path(project, instance, table) ⇒ String

Returns a fully-qualified table resource name string.

Parameters:

  • project (String)
  • instance (String)
  • table (String)

Returns:

  • (String)


78
79
80
81
82
83
84
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 78

def self.table_path project, instance, table
  TABLE_PATH_TEMPLATE.render(
    :"project" => project,
    :"instance" => instance,
    :"table" => table
  )
end

Instance Method Details

#check_and_mutate_row(table_name, row_key, app_profile_id: nil, predicate_filter: nil, true_mutations: nil, false_mutations: nil, options: nil) {|result, operation| ... } ⇒ Google::Bigtable::V2::CheckAndMutateRowResponse

Mutates a row atomically based on the output of a predicate Reader filter.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")

# TODO: Initialize `row_key`:
row_key = ''
response = bigtable_client.check_and_mutate_row(formatted_table_name, row_key)

Parameters:

  • table_name (String)

    Required. The unique name of the table to which the conditional mutation should be applied. Values are of the form projects/<project>/instances/<instance>/tables/<table>.

  • row_key (String)

    Required. The key of the row to which the conditional mutation should be applied.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • predicate_filter (Google::Bigtable::V2::RowFilter | Hash) (defaults to: nil)

    The filter to be applied to the contents of the specified row. Depending on whether or not any results are yielded, either true_mutations or false_mutations will be executed. If unset, checks that the row contains any values at all. A hash of the same form as Google::Bigtable::V2::RowFilter can also be provided.

  • true_mutations (Array<Google::Bigtable::V2::Mutation | Hash>) (defaults to: nil)

    Changes to be atomically applied to the specified row if predicate_filter yields at least one cell when applied to row_key. Entries are applied in order, meaning that earlier mutations can be masked by later ones. Must contain at least one entry if false_mutations is empty, and at most 100000. A hash of the same form as Google::Bigtable::V2::Mutation can also be provided.

  • false_mutations (Array<Google::Bigtable::V2::Mutation | Hash>) (defaults to: nil)

    Changes to be atomically applied to the specified row if predicate_filter does not yield any cells when applied to row_key. Entries are applied in order, meaning that earlier mutations can be masked by later ones. Must contain at least one entry if true_mutations is empty, and at most 100000. A hash of the same form as Google::Bigtable::V2::Mutation can also be provided.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Yields:

  • (result, operation)

    Access the result along with the RPC operation

Yield Parameters:

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 507

def check_and_mutate_row \
    table_name,
    row_key,
    app_profile_id: nil,
    predicate_filter: nil,
    true_mutations: nil,
    false_mutations: nil,
    options: nil,
    &block
  req = {
    table_name: table_name,
    row_key: row_key,
    app_profile_id: app_profile_id,
    predicate_filter: predicate_filter,
    true_mutations: true_mutations,
    false_mutations: false_mutations
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::CheckAndMutateRowRequest)
  @check_and_mutate_row.call(req, options, &block)
end

#mutate_row(table_name, row_key, mutations, app_profile_id: nil, options: nil) {|result, operation| ... } ⇒ Google::Bigtable::V2::MutateRowResponse

Mutates a row atomically. Cells already present in the row are left unchanged unless explicitly changed by mutation.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")

# TODO: Initialize `row_key`:
row_key = ''

# TODO: Initialize `mutations`:
mutations = []
response = bigtable_client.mutate_row(formatted_table_name, row_key, mutations)

Parameters:

  • table_name (String)

    Required. The unique name of the table to which the mutation should be applied. Values are of the form projects/<project>/instances/<instance>/tables/<table>.

  • row_key (String)

    Required. The key of the row to which the mutation should be applied.

  • mutations (Array<Google::Bigtable::V2::Mutation | Hash>)

    Required. Changes to be atomically applied to the specified row. Entries are applied in order, meaning that earlier mutations can be masked by later ones. Must contain at least one entry and at most 100000. A hash of the same form as Google::Bigtable::V2::Mutation can also be provided.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Yields:

  • (result, operation)

    Access the result along with the RPC operation

Yield Parameters:

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 387

def mutate_row \
    table_name,
    row_key,
    mutations,
    app_profile_id: nil,
    options: nil,
    &block
  req = {
    table_name: table_name,
    row_key: row_key,
    mutations: mutations,
    app_profile_id: app_profile_id
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::MutateRowRequest)
  @mutate_row.call(req, options, &block)
end

#mutate_rows(table_name, entries, app_profile_id: nil, options: nil) ⇒ Enumerable<Google::Bigtable::V2::MutateRowsResponse>

Mutates multiple rows in a batch. Each individual row is mutated atomically as in MutateRow, but the entire batch is not executed atomically.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")

# TODO: Initialize `entries`:
entries = []
bigtable_client.mutate_rows(formatted_table_name, entries).each do |element|
  # Process element.
end

Parameters:

  • table_name (String)

    Required. The unique name of the table to which the mutations should be applied.

  • entries (Array<Google::Bigtable::V2::MutateRowsRequest::Entry | Hash>)

    Required. The row keys and corresponding mutations to be applied in bulk. Each entry is applied as an atomic mutation, but the entries may be applied in arbitrary order (even between entries for the same row). At least one entry must be specified, and in total the entries can contain at most 100000 mutations. A hash of the same form as Google::Bigtable::V2::MutateRowsRequest::Entry can also be provided.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



440
441
442
443
444
445
446
447
448
449
450
451
452
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 440

def mutate_rows \
    table_name,
    entries,
    app_profile_id: nil,
    options: nil
  req = {
    table_name: table_name,
    entries: entries,
    app_profile_id: app_profile_id
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::MutateRowsRequest)
  @mutate_rows.call(req, options)
end

#read_modify_write_row(table_name, row_key, rules, app_profile_id: nil, options: nil) {|result, operation| ... } ⇒ Google::Bigtable::V2::ReadModifyWriteRowResponse

Modifies a row atomically on the server. The method reads the latest existing timestamp and value from the specified columns and writes a new entry based on pre-defined read/modify/write rules. The new value for the timestamp is the greater of the existing timestamp or the current server time. The method returns the new contents of all modified cells.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")

# TODO: Initialize `row_key`:
row_key = ''

# TODO: Initialize `rules`:
rules = []
response = bigtable_client.read_modify_write_row(formatted_table_name, row_key, rules)

Parameters:

  • table_name (String)

    Required. The unique name of the table to which the read/modify/write rules should be applied. Values are of the form projects/<project>/instances/<instance>/tables/<table>.

  • row_key (String)

    Required. The key of the row to which the read/modify/write rules should be applied.

  • rules (Array<Google::Bigtable::V2::ReadModifyWriteRule | Hash>)

    Required. Rules specifying how the specified row's contents are to be transformed into writes. Entries are applied in order, meaning that earlier rules will affect the results of later ones. A hash of the same form as Google::Bigtable::V2::ReadModifyWriteRule can also be provided.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Yields:

  • (result, operation)

    Access the result along with the RPC operation

Yield Parameters:

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 571

def read_modify_write_row \
    table_name,
    row_key,
    rules,
    app_profile_id: nil,
    options: nil,
    &block
  req = {
    table_name: table_name,
    row_key: row_key,
    rules: rules,
    app_profile_id: app_profile_id
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::ReadModifyWriteRowRequest)
  @read_modify_write_row.call(req, options, &block)
end

#read_rows(table_name, app_profile_id: nil, rows: nil, filter: nil, rows_limit: nil, options: nil) ⇒ Enumerable<Google::Bigtable::V2::ReadRowsResponse>

Streams back the contents of all requested rows in key order, optionally applying the same Reader filter to each. Depending on their size, rows and cells may be broken up across multiple responses, but atomicity of each row will still be preserved. See the ReadRowsResponse documentation for details.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")
bigtable_client.read_rows(formatted_table_name).each do |element|
  # Process element.
end

Parameters:

  • table_name (String)

    Required. The unique name of the table from which to read. Values are of the form projects/<project>/instances/<instance>/tables/<table>.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • rows (Google::Bigtable::V2::RowSet | Hash) (defaults to: nil)

    The row keys and/or ranges to read. If not specified, reads from all rows. A hash of the same form as Google::Bigtable::V2::RowSet can also be provided.

  • filter (Google::Bigtable::V2::RowFilter | Hash) (defaults to: nil)

    The filter to apply to the contents of the specified row(s). If unset, reads the entirety of each row. A hash of the same form as Google::Bigtable::V2::RowFilter can also be provided.

  • rows_limit (Integer) (defaults to: nil)

    The read will terminate after committing to N rows' worth of results. The default (zero) is to return all results.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 290

def read_rows \
    table_name,
    app_profile_id: nil,
    rows: nil,
    filter: nil,
    rows_limit: nil,
    options: nil
  req = {
    table_name: table_name,
    app_profile_id: app_profile_id,
    rows: rows,
    filter: filter,
    rows_limit: rows_limit
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::ReadRowsRequest)
  @read_rows.call(req, options)
end

#sample_row_keys(table_name, app_profile_id: nil, options: nil) ⇒ Enumerable<Google::Bigtable::V2::SampleRowKeysResponse>

Returns a sample of row keys in the table. The returned row keys will delimit contiguous sections of the table of approximately equal size, which can be used to break up the data for distributed tasks like mapreduces.

Examples:

require "google/cloud/bigtable/v2"

bigtable_client = Google::Cloud::Bigtable::V2.new
formatted_table_name = Google::Cloud::Bigtable::V2::BigtableClient.table_path("[PROJECT]", "[INSTANCE]", "[TABLE]")
bigtable_client.sample_row_keys(formatted_table_name).each do |element|
  # Process element.
end

Parameters:

  • table_name (String)

    Required. The unique name of the table from which to sample row keys. Values are of the form projects/<project>/instances/<instance>/tables/<table>.

  • app_profile_id (String) (defaults to: nil)

    This value specifies routing for replication. If not specified, the "default" application profile will be used.

  • options (Google::Gax::CallOptions) (defaults to: nil)

    Overrides the default settings for this call, e.g, timeout, retries, etc.

Returns:

Raises:

  • (Google::Gax::GaxError)

    if the RPC is aborted.



336
337
338
339
340
341
342
343
344
345
346
# File 'lib/google/cloud/bigtable/v2/bigtable_client.rb', line 336

def sample_row_keys \
    table_name,
    app_profile_id: nil,
    options: nil
  req = {
    table_name: table_name,
    app_profile_id: app_profile_id
  }.delete_if { |_, v| v.nil? }
  req = Google::Gax::to_proto(req, Google::Bigtable::V2::SampleRowKeysRequest)
  @sample_row_keys.call(req, options)
end