Module: Google::Cloud::Bigtable::ReadOperations

Included in:
Table
Defined in:
lib/google/cloud/bigtable/read_operations.rb

Overview

ReadOperations

Collection of read-rows APIs.

  • Sample row key
  • Read row
  • Read rows

Instance Method Summary collapse

Instance Method Details

#filterGoogle::Cloud::Bigtable::RowRange

Gets a row filter.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

filter = table.filter.key "user-*"

Returns:



303
304
305
# File 'lib/google/cloud/bigtable/read_operations.rb', line 303

def filter
  Google::Cloud::Bigtable::RowFilter
end

#new_column_range(family) ⇒ Google::Cloud::Bigtable::ColumnRange

Gets a new instance of ColumnRange.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_column_range "test-family"
range.from "abc"
range.to "xyz"

# OR
range = table.new_column_range("test-family").from("key-1").to("key-5")

With exclusive from range.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_column_range("test-family").from("key-1", inclusive: false).to("key-5")

Parameters:

  • family (String)

    Column family name.

Returns:



256
257
258
# File 'lib/google/cloud/bigtable/read_operations.rb', line 256

def new_column_range family
  Google::Cloud::Bigtable::ColumnRange.new family
end

#new_row_rangeGoogle::Cloud::Bigtable::RowRange

Gets a new instance of RowRange.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_row_range
range.from "abc"
range.to "xyz"

# OR
range = table.new_row_range.from("key-1").to("key-5")

With exclusive from range.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_row_range.from("key-1", inclusive: false).to("key-5")

Returns:



286
287
288
# File 'lib/google/cloud/bigtable/read_operations.rb', line 286

def new_row_range
  Google::Cloud::Bigtable::RowRange.new
end

#new_value_rangeGoogle::Cloud::Bigtable::ValueRange

Creates a new instance of ValueRange.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_value_range
range.from "abc"
range.to "xyz"

# OR
range = table.new_value_range.from("abc").to("xyz")

With exclusive from range.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_value_range.from("abc", inclusive: false).to("xyz")

Returns:



225
226
227
# File 'lib/google/cloud/bigtable/read_operations.rb', line 225

def new_value_range
  Google::Cloud::Bigtable::ValueRange.new
end

#read_row(key, filter: nil) ⇒ Google::Cloud::Bigtable::Row

Reads a single row by row key.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

row = table.read_row "user-1"

Read row with filter.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

filter = Google::Cloud::Bigtable::RowFilter.cells_per_row 3

row = table.read_row "user-1", filter: filter

Parameters:

  • key (String)

    Row key. Required.

  • filter (Google::Cloud::Bigtable::RowFilter) (defaults to: nil)

    The filter to apply to the contents of the specified row. Optional.

Returns:



195
196
197
# File 'lib/google/cloud/bigtable/read_operations.rb', line 195

def read_row key, filter: nil
  read_rows(keys: [key], filter: filter).first
end

#read_rows(keys: nil, ranges: nil, filter: nil, limit: nil, &block) ⇒ Array<Google::Cloud::Bigtable::Row> | :yields: row

Reads rows.

Streams back the contents of all requested rows in key order, optionally applying the same Reader filter to each. read_rows, row_ranges and filter if not specified, reads from all rows.

See Google::Cloud::Bigtable::RowFilter for filter types.

Examples:

Read with limit.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

table.read_rows(limit: 10).each do |row|
  puts row
end

Read using row keys.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

table.read_rows(keys: ["user-1", "user-2"]).each do |row|
  puts row
end

Read using row ranges.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

range = table.new_row_range.between "user-1", "user-100"

table.read_rows(ranges: range).each do |row|
  puts row
end

Read using filter.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

filter = table.filter.key "user-*"
# OR
# filter = Google::Cloud::Bigtable::RowFilter.key "user-*"

table.read_rows(filter: filter).each do |row|
  puts row
end

Read using filter with limit.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

filter = table.filter.key "user-*"
# OR
# filter = Google::Cloud::Bigtable::RowFilter.key "user-*"

table.read_rows(filter: filter, limit: 10).each do |row|
  puts row
end

Parameters:

  • keys (Array<String>) (defaults to: nil)

    List of row keys to be read. Optional.

  • ranges (Google::Cloud::Bigtable::RowRange | Array<Google::Cloud::Bigtable::RowRange>) (defaults to: nil)

    Row ranges array or single range. Optional.

  • filter (SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter) (defaults to: nil)

    The filter to apply to the contents of the specified row(s). If unset, reads the entries of each row. Optional.

  • limit (Integer) (defaults to: nil)

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

Returns:



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/google/cloud/bigtable/read_operations.rb', line 149

def read_rows keys: nil, ranges: nil, filter: nil, limit: nil, &block
  return enum_for :read_rows, keys: keys, ranges: ranges, filter: filter, limit: limit unless block_given?

  row_set = build_row_set keys, ranges
  rows_limit = limit
  rows_filter = filter.to_grpc if filter
  rows_reader = RowsReader.new self

  begin
    rows_reader.read rows: row_set, filter: rows_filter, rows_limit: rows_limit, &block
  rescue *RowsReader::RETRYABLE_ERRORS => e
    rows_reader.retry_count += 1
    raise Google::Cloud::Error.from_error(e) unless rows_reader.retryable?
    resumption_option = rows_reader.retry_options limit, row_set
    rows_limit = resumption_option.rows_limit
    row_set = resumption_option.row_set
    retry unless resumption_option.complete?
  end
end

#sample_row_keys:yields: sample_row_key

Reads sample row keys.

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

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
table = bigtable.table "my-instance", "my-table"

table.sample_row_keys.each do |sample_row_key|
  p sample_row_key.key # user00116
  p sample_row_key.offset # 805306368
end

Yield Returns:

Returns:

  • (:yields: sample_row_key)

    Yield block for each processed SampleRowKey.



60
61
62
63
64
65
66
67
# File 'lib/google/cloud/bigtable/read_operations.rb', line 60

def sample_row_keys
  return enum_for :sample_row_keys unless block_given?

  response = service.sample_row_keys path, app_profile_id: @app_profile_id
  response.each do |grpc|
    yield SampleRowKey.from_grpc grpc
  end
end