Ejemplo: aplicación “hello world” en Ruby

Esta muestra de código es una aplicación “hello world” que se ejecuta en Ruby. En este ejemplo, se muestra cómo completar las siguientes tareas:

  • Conectarse a una instancia de Cloud Bigtable.
  • Crear una tabla nueva.
  • Escribir datos en la tabla.
  • Volver a leer datos.
  • Borrar la tabla.

Ejecuta la muestra

En esta muestra de código, se usa el paquete cliente de Ruby para Cloud Bigtable de la biblioteca cliente de Google Cloud para Ruby a fin de comunicarse con Cloud Bigtable.

Para ejecutar el programa de muestra, sigue las instrucciones que se indican en GitHub.

Usa la biblioteca cliente de Cloud con Cloud Bigtable

La aplicación de muestra se conecta con Cloud Bigtable y demuestra algunas operaciones simples.

Requisitos de la biblioteca cliente

La muestra necesita google/cloud/bigtable, que proporciona el módulo Bigtable.

require "google/cloud/bigtable"

Conéctate con Cloud Bigtable

Establece las variables que usarás en tu aplicación y reemplaza “YOUR_PROJECT_ID” con el ID de un proyecto válido de Google Cloud. Luego, crea un nuevo objeto Bigtable, que usarás para conectarte a Cloud Bigtable.

project_id = "YOUR_PROJECT_ID"
table_id = "Hello-Bigtable"
instance_id = "my-instance"
column_family = "cf"
column_qualifier = "greeting"

bigtable = Google::Cloud::Bigtable.new project_id: project_id

Crea una tabla

Comprueba si tu tabla ya existe. Si no es así, llama al método create_table() para crear un objeto Table. La tabla tiene una sola familia de columnas, que contiene una versión de cada valor.

if bigtable.table(instance_id, table_id).exists?
  puts "#{table_id} is already exists."
  exit 0
else
  table = bigtable.create_table instance_id, table_id do |column_families|
    column_families.add(
      column_family,
      Google::Cloud::Bigtable::GcRule.max_versions(1)
    )
  end

  puts "Table #{table_id} created."
end

Escribe filas en una tabla

A continuación, usa un arreglo de strings de saludos a fin de crear algunas filas nuevas para la tabla. Por cada saludo, crea una entrada con el método new_mutation_entry() de la tabla. A continuación, usa el método set_cell() de la entrada para asignar la familia de columnas, el calificador de columna, el saludo y una marca de tiempo a la entrada. Por último, escribe la entrada en la tabla usando el método mutate_row() de la tabla.

puts "Write some greetings to the table #{table_id}"
greetings = ["Hello World!", "Hello Bigtable!", "Hello Ruby!"]

# Insert rows one by one
# Note: To perform multiple mutation on multiple rows use `mutate_rows`.
greetings.each_with_index do |value, i|
  puts " Writing,  Row key: greeting#{i}, Value: #{value}"

  entry = table.new_mutation_entry "greeting#{i}"
  entry.set_cell(
    column_family,
    column_qualifier,
    value,
    timestamp: (Time.now.to_f * 1_000_000).round(-3)
  )

  table.mutate_row entry
end

Crear un filtro

Antes de leer los datos que escribiste, crea un filtro para limitar los datos que muestre Cloud Bigtable. El filtro le indica a Cloud Bigtable que muestre solo la versión más reciente de cada valor, incluso si la tabla contiene versiones anteriores que no pasaron por el proceso de recolección de elementos no utilizados.

# Only retrieve the most recent version of the cell.
filter = Google::Cloud::Bigtable::RowFilter.cells_per_column 1

Lee una fila por su clave de fila

Crea un objeto de fila, llama al método read_row() y, luego, aplica el filtro para obtener una versión de cada valor de la fila.

puts "Reading a single row by row key"
row = table.read_row "greeting0", filter: filter
puts "Row key: #{row.key}, Value: #{row.cells[column_family].first.value}"

puts "Reading the entire table"
table.read_rows.each do |row|
  puts "Row key: #{row.key}, Value: #{row.cells[column_family].first.value}"
end

puts "Deleting the table #{table_id}"
table.delete

Analiza todas las filas de una tabla

Llama al método read_rows() y aplica el filtro para pasar todas las filas de la tabla. Dado que aplicaste el filtro, Cloud Bigtable solo mostrará una versión de cada valor.

puts "Reading the entire table"
table.read_rows.each do |row|
  puts "Row key: #{row.key}, Value: #{row.cells[column_family].first.value}"
end

Borra una tabla

Borra la tabla con el método delete().

puts "Deleting the table #{table_id}"
table.delete

Revisión general

Aquí encontrarás el código de muestra completo sin comentarios.

# frozen_string_literal: true

require "google/cloud/bigtable"

project_id = "YOUR_PROJECT_ID"
table_id = "Hello-Bigtable"
instance_id = "my-instance"
column_family = "cf"
column_qualifier = "greeting"

bigtable = Google::Cloud::Bigtable.new project_id: project_id

if bigtable.table(instance_id, table_id).exists?
  puts "#{table_id} is already exists."
  exit 0
else
  table = bigtable.create_table instance_id, table_id do |column_families|
    column_families.add(
      column_family,
      Google::Cloud::Bigtable::GcRule.max_versions(1)
    )
  end

  puts "Table #{table_id} created."
end

puts "Write some greetings to the table #{table_id}"
greetings = ["Hello World!", "Hello Bigtable!", "Hello Ruby!"]

# Insert rows one by one
# Note: To perform multiple mutation on multiple rows use `mutate_rows`.
greetings.each_with_index do |value, i|
  puts " Writing,  Row key: greeting#{i}, Value: #{value}"

  entry = table.new_mutation_entry "greeting#{i}"
  entry.set_cell(
    column_family,
    column_qualifier,
    value,
    timestamp: (Time.now.to_f * 1_000_000).round(-3)
  )

  table.mutate_row entry
end

# Only retrieve the most recent version of the cell.
filter = Google::Cloud::Bigtable::RowFilter.cells_per_column 1

puts "Reading a single row by row key"
row = table.read_row "greeting0", filter: filter
puts "Row key: #{row.key}, Value: #{row.cells[column_family].first.value}"

puts "Reading the entire table"
table.read_rows.each do |row|
  puts "Row key: #{row.key}, Value: #{row.cells[column_family].first.value}"
end

puts "Deleting the table #{table_id}"
table.delete