Ruby hello world

Contoh kode ini adalah aplikasi "hello world" yang berjalan di Ruby. Contoh ini menunjukkan cara menyelesaikan tugas-tugas berikut:

  • Menyiapkan autentikasi
  • Menghubungkan ke instance Bigtable.
  • Buat tabel baru.
  • Tulis data ke tabel.
  • Baca kembali data.
  • Hapus tabel.

Menyiapkan autentikasi

Untuk menggunakan contoh Ruby di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

  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.

Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

Menjalankan contoh

Contoh kode ini menggunakan paket library klien Ruby untuk Bigtable dari Library Klien Google Cloud untuk Ruby untuk berkomunikasi dengan Bigtable.

Untuk menjalankan program contoh ini, ikuti petunjuk untuk contoh di GitHub.

Menggunakan Library Klien Cloud dengan Bigtable

Aplikasi contoh terhubung ke Bigtable dan menunjukkan beberapa operasi sederhana.

Mewajibkan library klien

Sampel memerlukan google/cloud/bigtable, yang menyediakan modul Bigtable.

require "google/cloud/bigtable"

Menghubungkan ke Bigtable

Tetapkan variabel yang akan Anda gunakan dalam aplikasi, dengan mengganti "YOUR_PROJECT_ID" dengan ID project Google Cloud yang valid. Kemudian, buat objek Bigtable baru yang akan Anda gunakan untuk terhubung ke Bigtable.

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

bigtable = Google::Cloud::Bigtable.new

Membuat tabel

Periksa apakah tabel Anda sudah ada. Jika tidak, panggil metode create_table() untuk membuat objek Table. Tabel memiliki satu grup kolom yang mempertahankan satu versi dari setiap nilai.

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

Menulis baris ke tabel

Selanjutnya, gunakan array string ucapan untuk membuat beberapa baris baru untuk tabel. Untuk setiap ucapan, buat entri menggunakan metode new_mutation_entry() tabel. Selanjutnya, gunakan metode set_cell() entri untuk menetapkan grup kolom, penentu kolom, ucapan, dan stempel waktu ke entri. Terakhir, tulis entri tersebut ke tabel menggunakan metode mutate_row() tabel.

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

Membuat filter

Sebelum membaca data yang Anda tulis, buat filter untuk membatasi data yang ditampilkan Bigtable. Filter ini memberi tahu Bigtable untuk hanya menampilkan versi terbaru dari setiap nilai, meskipun tabel berisi versi lama yang belum dihapus sampahnya.

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

Membaca baris berdasarkan kunci barisnya

Buat objek baris, lalu panggil metode read_row(), yang meneruskan filter, untuk mendapatkan satu versi dari setiap nilai dalam baris tersebut.

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

Memindai semua baris tabel

Panggil metode read_rows(), dengan meneruskan filter, untuk mendapatkan semua baris dalam tabel. Karena Anda meneruskan filter, Bigtable hanya menampilkan satu versi dari setiap nilai.

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

Menghapus tabel

Hapus tabel dengan metode delete() tabel.

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

Menggabungkan semuanya

Berikut adalah contoh kode lengkap tanpa komentar.

# 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