Hello World Ruby

Cet exemple de code présente une application "Hello World" écrite en Ruby. Il montre comment effectuer les tâches suivantes :

  • Configurer l'authentification
  • Connexion à une instance Bigtable
  • créer une table ;
  • Écrire des données dans une table
  • Relire les données
  • Supprimer la table

Configurer l'authentification

Pour utiliser les exemples Ruby de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

Pour en savoir plus, consultez Set up authentication for a local development environment.

Exécuter l'exemple

Cet exemple de code utilise le package de bibliothèque cliente Ruby pour Bigtable de la bibliothèque cliente Google Cloud pour Ruby afin de communiquer avec Bigtable.

Pour exécuter ce programme, suivez les instructions de l'exemple sur GitHub.

Utiliser la bibliothèque cliente Cloud avec Bigtable

L'exemple d'application permet de se connecter à Bigtable et décrit quelques opérations simples.

Bibliothèque cliente requise

L'exemple nécessite google/cloud/bigtable, qui fournit le module Bigtable.

require "google/cloud/bigtable"

Se connecter à Bigtable

Définissez les variables que vous utiliserez au sein de votre application, en remplaçant "YOUR_PROJECT_ID" par l'ID d'un projet Google Cloud valide. Créez ensuite un objet Bigtable que vous utiliserez pour vous connecter à Bigtable.

# instance_id      = "my-instance"
# table_id         = "my-table"
# column_family    = "cf"
# column_qualifier = "greeting"

bigtable = Google::Cloud::Bigtable.new

Créer une table

Vérifiez si votre table existe déjà. Si ce n'est pas le cas, appelez la méthode create_table() pour créer un objet Table. La table possède une seule famille de colonnes qui conserve une version de chaque valeur.

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

Écrire des lignes dans une table

Ensuite, utilisez un tableau de chaînes de salutations pour créer des lignes de table. Pour chaque salutation, créez une entrée à l'aide de la méthode new_mutation_entry() de la table. Ensuite, utilisez la méthode set_cell() de l'entrée pour lui attribuer la famille de colonnes, le qualificatif de colonne, le message de salutation ainsi qu'un horodatage. Enfin, écrivez cette entrée dans la table à l'aide de la méthode mutate_row() de la table.

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

Créer un filtre

Avant de lire les données que vous avez écrites, créez un filtre pour limiter les données renvoyées par Bigtable. Ce filtre indique à Bigtable de ne renvoyer que la version la plus récente de chaque valeur, même si la table contient des versions antérieures qui n'ont pas fait l'objet d'une récupération de mémoire.

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

Lire une ligne à l'aide de sa clé

Créez un objet ligne, puis appelez la méthode read_row() en transmettant le filtre, afin d'obtenir une version pour chaque valeur de cette ligne.

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}"

Analyser toutes les lignes de la table

Appelez la méthode read_rows() en transmettant le filtre, afin d'obtenir toutes les lignes de la table. En raison du filtre, Bigtable ne renvoie qu'une version de chaque valeur.

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

Supprimer une table

Supprimez la table à l'aide de sa méthode delete().

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

Synthèse

Voici l'exemple de code complet sans commentaires.

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

def hello_world instance_id, table_id, column_family, column_qualifier
  require "google/cloud/bigtable"

  # instance_id      = "my-instance"
  # table_id         = "my-table"
  # column_family    = "cf"
  # column_qualifier = "greeting"

  bigtable = Google::Cloud::Bigtable.new

  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
end