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:



305
306
307
# File 'lib/google/cloud/bigtable/read_operations.rb', line 305

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

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

Get 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:



258
259
260
# File 'lib/google/cloud/bigtable/read_operations.rb', line 258

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

#new_row_rangeGoogle::Cloud::Bigtable::RowRange

Get 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:



288
289
290
# File 'lib/google/cloud/bigtable/read_operations.rb', line 288

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:



227
228
229
# File 'lib/google/cloud/bigtable/read_operations.rb', line 227

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:

Read row


require "google/cloud/bigtable"

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

row = table.read_row("user-1")

Read row


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:



197
198
199
# File 'lib/google/cloud/bigtable/read_operations.rb', line 197

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:



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 151

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?
    rows_limit, row_set = rows_reader.retry_options limit, row_set
    retry
  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 = client.sample_row_keys path, app_profile_id: @app_profile_id
  response.each do |grpc|
    yield SampleRowKey.from_grpc grpc
  end
end