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

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



319
320
321
# File 'lib/google/cloud/bigtable/read_operations.rb', line 319

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

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

Get new instance of ColumnRange.

Examples:

require "google/cloud/bigtable"

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

range = table.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:



274
275
276
# File 'lib/google/cloud/bigtable/read_operations.rb', line 274

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

#new_row_rangeGoogle::Cloud::Bigtable::RowRange

Get new instance of RowRange.

Examples:

require "google/cloud/bigtable"

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

range = table.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:



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

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

#new_value_rangeGoogle::Cloud::Bigtable::ValueRange

Create new instance of ValueRange.

Examples:

require "google/cloud/bigtable"

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

range = table.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:



244
245
246
# File 'lib/google/cloud/bigtable/read_operations.rb', line 244

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

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

Read single row by 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:

Returns:



215
216
217
# File 'lib/google/cloud/bigtable/read_operations.rb', line 215

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

Read 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.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 rowow
end

Parameters:

  • keys (Array<String>)

    List of row keys to be read. Optional.

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

    Row ranges array or single range. Optional.

  • filter (SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter)

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

  • limit (Integer)

    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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/google/cloud/bigtable/read_operations.rb', line 151

def read_rows \
    keys: nil,
    ranges: nil,
    filter: nil,
    limit: nil,
    &block
  unless block_given?
    return enum_for(
      :read_rows,
      keys: keys,
      ranges: ranges,
      filter: filter,
      limit: limit
    )
  end
  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
    unless rows_reader.retryable?
      raise Google::Cloud::Error.from_error(e)
    end
    rows_limit, row_set = rows_reader.retry_options(limit, row_set)
    retry
  end
end

#sample_row_keys:yields: sample_row_key

Read 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, which can be used to break up the data for distributed tasks like mapreduces.

Examples:

require "google/cloud"

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.



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

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