Class: Google::Cloud::Bigtable::MutationEntry

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

Overview

MutationEntry

MutationEntry is a chainable structure that holds data for different type of mutations. MutationEntry is used in following data operations:

  • Mutate row. See Table#mutate_row
  • Mutate rows. See Table#mutate_rows
  • Check and mutate row using a predicate. See Table#check_and_mutate_row

Examples:

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
timestamp_micros = (Time.now.to_f * 1000000).round(-3)
entry.set_cell(
  "cf1", "fiel01", "XYZ", timestamp: timestamp_micros
).delete_cells(
  "cf2",
  "field02",
  timestamp_from: timestamp_micros - 5000000,
  timestamp_to: timestamp_micros
).delete_from_family("cf3").delete_from_row

Using table

require "google/cloud/bigtable"

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

entry = table.new_mutation_entry("user-1")
timestamp_micros = (Time.now.to_f * 1000000).round(-3)
entry.set_cell(
  "cf1", "fiel01", "XYZ", timestamp: timestamp_micros
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(row_key = nil) ⇒ MutationEntry

Creates a mutation entry instance.

Parameters:

  • row_key (String) (defaults to: nil)


70
71
72
73
74
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 70

def initialize row_key = nil
  @row_key = row_key
  @mutations = []
  @retryable = true
end

Instance Attribute Details

#row_keyObject

Returns the value of attribute row_key.



58
59
60
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 58

def row_key
  @row_key
end

Instance Method Details

#delete_cells(family, qualifier, timestamp_from: nil, timestamp_to: nil) ⇒ MutationEntry

Add DeleteFromColumn entry to list of mutations.

A mutation that deletes cells from the specified column, optionally restricting the deletions to a given timestamp range.

Examples:

Without timestamp range

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
entry.delete_cells("cf-1", "field-1")

With timestamp range

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
timestamp_micros = (Time.now.to_f * 1000000).round(-3)
entry.delete_cells(
  "cf1",
  "field-1",
  timestamp_from: timestamp_micros - 5000000,
  timestamp_to: timestamp_micros
)

With timestamp range with lower boundary only

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
timestamp_micros = (Time.now.to_f * 1000000).round(-3)
entry.delete_cells(
  "cf1",
  "field-1",
  timestamp_from: timestamp_micros - 5000000
)

Parameters:

  • family (String)

    Table column family name. The name of the column family from which cells should be deleted. Must match [-_.a-zA-Z0-9]+

  • qualifier (String)

    Column qualifier name. The qualifier of the column from which cells should be deleted. Can be any byte string, including an empty string.

  • timestamp_from (Integer) (defaults to: nil)

    Timestamp lower boundary in microseconds. Optional. Begins the range of timestamps from which cells should be deleted. Values are in microseconds but must match the granularity of the table. Therefore, if Table#granularity is MILLIS (the default), the given value must be a multiple of 1000 (millisecond granularity). For example: 1564257960168000.

  • timestamp_to (Integer) (defaults to: nil)

    Timestamp upper boundary in microseconds. Optional. Ends the range of timestamps from which cells should be deleted. Values are in microseconds but must match the granularity of the table. Therefore, if Table#granularity is MILLIS (the default), the given value must be a multiple of 1000 (millisecond granularity). For example: 1564257960168000.

Returns:



178
179
180
181
182
183
184
185
186
187
188
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 178

def delete_cells family, qualifier, timestamp_from: nil, timestamp_to: nil
  grpc = Google::Bigtable::V2::Mutation::DeleteFromColumn.new family_name: family, column_qualifier: qualifier
  if timestamp_from || timestamp_to
    time_range = Google::Bigtable::V2::TimestampRange.new
    time_range.start_timestamp_micros = timestamp_from if timestamp_from
    time_range.end_timestamp_micros = timestamp_to if timestamp_to
    grpc.time_range = time_range
  end
  @mutations << Google::Bigtable::V2::Mutation.new(delete_from_column: grpc)
  self
end

#delete_from_family(family) ⇒ MutationEntry

Add DeleteFromFamily to list of mutations.

A mutation that deletes all cells from the specified column family.

Examples:

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
entry.delete_from_family("cf-1")

Parameters:

  • family (String)

    Table column family name. The name of the column family from which cells should be deleted. Must match [-_.a-zA-Z0-9]+

Returns:



204
205
206
207
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 204

def delete_from_family family
  @mutations << Google::Bigtable::V2::Mutation.new(delete_from_family: { family_name: family })
  self
end

#delete_from_rowMutationEntry

Add DeleteFromRow entry to list of mutations

A Mutation which deletes all cells from the containing row.

Examples:

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
entry.delete_from_row

Returns:



220
221
222
223
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 220

def delete_from_row
  @mutations << Google::Bigtable::V2::Mutation.new(delete_from_row: {})
  self
end

#lengthInteger

Number of mutations

Returns:

  • (Integer)


239
240
241
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 239

def length
  @mutations.length
end

#retryable?Boolean

Mutation entry is retryable or not based on set_cell value.

Returns:

  • (Boolean)


230
231
232
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 230

def retryable?
  @retryable
end

#set_cell(family, qualifier, value, timestamp: nil) ⇒ MutationEntry

Add SetCell mutation to list of mutations.

A mutation that sets the value of the specified cell.

Examples:

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
entry.set_cell("cf1", "field01", "XYZ")

With timestamp

entry = Google::Cloud::Bigtable::MutationEntry.new("user-1")
entry.set_cell(
  "cf-1",
  "field-1",
  "XYZ",
  timestamp: (Time.now.to_f * 1000000).round(-3) # microseconds
)

Parameters:

  • family (String)

    Table column family name. The name of the family into which new data should be written. Must match [-_.a-zA-Z0-9]+

  • qualifier (String)

    Column qualifier name. The qualifier of the column into which new data should be written. Can be any byte string, including an empty string.

  • value (String, Integer)

    Cell value data. The value to be written into the specified cell.

  • timestamp (Integer) (defaults to: nil)

    Timestamp value in microseconds. The timestamp of the cell into which new data should be written. Use -1 for current Bigtable server time. Otherwise, the client should set this value itself, noting that the default value is a timestamp of zero if the field is left unspecified. Values are in microseconds but must match the granularity of the table. Therefore, if Table#granularity is MILLIS (the default), the given value must be a multiple of 1000 (millisecond granularity). For example: 1564257960168000.

Returns:



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/google/cloud/bigtable/mutation_entry.rb', line 113

def set_cell family, qualifier, value, timestamp: nil
  # If value is integer, covert it to a 64-bit signed big-endian integer.
  value = [value].pack "q>" if value.is_a? Integer
  options = {
    family_name:      family,
    column_qualifier: qualifier,
    value:            value
  }

  if timestamp
    options[:timestamp_micros] = timestamp
    @retryable = timestamp != -1
  end
  @mutations << Google::Bigtable::V2::Mutation.new(set_cell: options)
  self
end