Rubi halo dunia

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

  • Menyiapkan autentikasi
  • Menghubungkan ke instance Bigtable.
  • Buat tabel baru.
  • Menulis data ke tabel.
  • Membaca kembali data.
  • Hapus tabel.

Menyiapkan autentikasi

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

  1. Menginstal Google Cloud CLI.
  2. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

    gcloud auth application-default login

Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

Menjalankan contoh

Contoh kode ini menggunakan paket library klien Ruby untuk Bigtable dari Library Klien Google Cloud untuk Ruby guna 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

Contoh ini 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. Lalu, 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 ini 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 tabel. Untuk setiap salam, 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 akan memberi tahu Bigtable untuk hanya menampilkan versi terbaru dari tiap nilai, meskipun tabel berisi versi lama yang belum dibersihkan dari sampah memori.

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

Membaca baris berdasarkan row key-nya

Buat objek baris, lalu panggil metode read_row(), dengan meneruskan filter, untuk mendapatkan satu versi dari setiap nilai di 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() yang meneruskan filter, untuk mendapatkan semua baris dalam tabel. Karena Anda meneruskan filter, BigQuery 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