Petunjuk dan persyaratan penyiapan lab
Lindungi akun dan progres Anda. Selalu gunakan jendela browser pribadi dan kredensial lab untuk menjalankan lab ini.

Cloud Spanner - Menentukan Skema dan Memahami Paket Kueri

Lab 1 jam 30 menit universal_currency_alt 1 Kredit show_chart Pengantar
info Lab ini mungkin menggabungkan alat AI untuk mendukung pembelajaran Anda.
Konten ini belum dioptimalkan untuk perangkat seluler.
Untuk pengalaman terbaik, kunjungi kami dengan komputer desktop menggunakan link yang dikirim melalui email.

GSP1050

Logo lab mandiri Google Cloud

Ringkasan

Cloud Spanner adalah layanan database relasional yang terkelola sepenuhnya dan dapat diskalakan secara horizontal dari Google. Pelanggan di layanan keuangan, game, retail, dan banyak industri lainnya mempercayai layanan ini untuk menjalankan workload yang paling berat, yang konsistensi dan ketersediaannya dalam skala besar sangat penting.

Di lab ini, Anda akan meninjau fitur terkait skema Cloud Spanner dan menerapkannya ke database Operasi Perbankan. Anda juga akan meninjau metode dan aturan yang digunakan Cloud Spanner untuk membuat paket kueri.

Yang akan Anda lakukan

Di lab ini, Anda akan mempelajari cara memodifikasi atribut terkait skema dari instance Cloud Spanner.

  • Memuat data ke dalam tabel
  • Menggunakan kode library klien Python yang telah ditentukan sebelumnya untuk memuat data
  • Mengkueri data dengan library klien
  • Membuat pembaruan pada skema database
  • Menambahkan Indeks Sekunder
  • Memeriksa Paket kueri

Penyiapan dan persyaratan

Sebelum mengklik tombol Start Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran. Di sebelah kiri ada panel Lab Details yang berisi hal-hal berikut:

    • Tombol Open Google Cloud console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).

    Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.

    {{{user_0.username | "Username"}}}

    Anda juga dapat menemukan Username di panel Lab Details.

  4. Klik Next.

  5. Salin Password di bawah dan tempel ke dialog Welcome.

    {{{user_0.password | "Password"}}}

    Anda juga dapat menemukan Password di panel Lab Details.

  6. Klik Next.

    Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  7. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan mendaftar uji coba gratis.

Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.

Catatan: Untuk mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search. Ikon Navigation menu dan kolom Search

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas Konsol Google Cloud.

  2. Klik jendela berikut:

    • Lanjutkan melalui jendela informasi Cloud Shell.
    • Beri otorisasi ke Cloud Shell untuk menggunakan kredensial Anda guna melakukan panggilan Google Cloud API.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

Output:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} Untuk menetapkan akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project

Output:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Instance Cloud Spanner

Agar Anda dapat menyelesaikan lab ini dengan lebih cepat, instance, database, dan tabel Cloud Spanner telah dibuat secara otomatis untuk Anda.

Berikut beberapa detail untuk referensi Anda:

Item Nama Detail
Instance Cloud Spanner banking-ops-instance Ini adalah instance level project
Database Cloud Spanner banking-ops-db Ini adalah database khusus instance
Tabel Portofolio Berisi penawaran bank tingkat atas
Tabel Kategori Berisi pengelompokan penawaran bank tingkat kedua
Tabel Produk Berisi penawaran bank item baris tertentu
Tabel Kampanye Berisi detail tentang inisiatif pemasaran

Tugas 1. Memuat data ke dalam tabel

banking-ops-db dibuat dengan tabel kosong. Ikuti langkah-langkah di bawah ini untuk memuat data ke tiga tabel (Portfolio, Category, dan Product).

  1. Dari Konsol Cloud, buka menu navigasi (console_nav_small.png) > View All Products, lalu di bagian Databases, klik Spanner.

  2. Nama instance-nya adalah banking-ops-instance, klik nama tersebut untuk menjelajahi database.

  3. Database terkait diberi nama banking-ops-db. Klik nama set data, scroll ke bawah ke Tables, dan Anda akan melihat ada empat tabel yang sudah ada.

  4. Di panel kiri Konsol, klik Spanner Studio. Kemudian, klik tombol + New SQL Editor Tab di frame kanan.

  5. Tindakan ini akan mengarahkan Anda ke halaman Query. Tempelkan pernyataan penyisipan di bawah sebagai satu blok untuk memuat tabel Portfolio. Spanner akan mengeksekusi setiap perintah secara berurutan. Klik Run:

insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (1, "Banking", "Bnkg", "All Banking Business"); insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (2, "Asset Growth", "AsstGrwth", "All Asset Focused Products"); insert into Portfolio (PortfolioId, Name, ShortName, PortfolioInfo) values (3, "Insurance", "Ins", "All Insurance Focused Products");
  1. Halaman bawah layar menampilkan hasil penyisipan data satu baris pada satu waktu. Tanda centang hijau juga muncul di setiap baris data yang disisipkan. Tabel Portfolio sekarang memiliki tiga baris.

  2. Klik Clear di bagian atas halaman.

  3. Tempelkan pernyataan penyisipan di bawah sebagai satu blok untuk memuat tabel Category. Klik Run:

insert into Category (CategoryId,PortfolioId,CategoryName) values (1,1,"Cash"); insert into Category (CategoryId,PortfolioId,CategoryName) values (2,2,"Investments - Short Return"); insert into Category (CategoryId,PortfolioId,CategoryName) values (3,2,"Annuities"); insert into Category (CategoryId,PortfolioId,CategoryName) values (4,3,"Life Insurance");
  1. Halaman bawah layar menampilkan hasil penyisipan data satu baris pada satu waktu. Tanda centang hijau juga muncul di setiap baris data yang disisipkan. Tabel Category sekarang memiliki empat baris.

  2. Klik Clear di bagian atas halaman.

  3. Tempelkan pernyataan penyisipan di bawah sebagai satu blok untuk memuat tabel Product. Klik Run:

insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (1,1,1,"Checking Account","ChkAcct","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (2,2,2,"Mutual Fund Consumer Goods","MFundCG","Investment LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (3,3,2,"Annuity Early Retirement","AnnuFixed","Investment LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (4,4,3,"Term Life Insurance","TermLife","Insurance LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (5,1,1,"Savings Account","SavAcct","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (6,1,1,"Personal Loan","PersLn","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (7,1,1,"Auto Loan","AutLn","Banking LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (8,4,3,"Permanent Life Insurance","PermLife","Insurance LOB"); insert into Product (ProductId,CategoryId,PortfolioId,ProductName,ProductAssetCode,ProductClass) values (9,2,2,"US Savings Bonds","USSavBond","Investment LOB");
  1. Halaman bawah layar menampilkan hasil penyisipan data satu baris pada satu waktu. Tanda centang hijau juga muncul di setiap baris data yang disisipkan. Tabel Product sekarang memiliki sembilan baris.

  2. Klik Periksa progres saya untuk memverifikasi tujuan.

Memuat Data ke dalam Tabel Portofolio, Kategori, dan Produk

Tugas 2. Menggunakan kode library klien Python bawaan untuk memuat data

Anda akan menggunakan library klien yang ditulis dalam Python untuk beberapa langkah berikutnya.

  1. Buka Cloud Shell dan tempel perintah di bawah untuk membuat dan mengubah ke direktori baru untuk menyimpan file yang diperlukan.
mkdir python-helper cd python-helper
  1. Selanjutnya, download dua file. Satu digunakan untuk menyiapkan lingkungan. Yang satu lagi adalah kode lab.
wget https://storage.googleapis.com/cloud-training/OCBL373/requirements.txt wget https://storage.googleapis.com/cloud-training/OCBL373/snippets.py
  1. Buat lingkungan Python yang terisolasi dan instal dependensi untuk klien Cloud Spanner.
pip install -r requirements.txt pip install setuptools
  1. snippets.py adalah file gabungan dengan beberapa fungsi DDL, DML, dan DCL Cloud Spanner yang akan Anda gunakan sebagai helper selama lab ini. Jalankan snippets.py menggunakan argumen insert_data untuk mengisi tabel Campaigns.
python snippets.py banking-ops-instance --database-id banking-ops-db insert_data
  1. Klik Periksa progres saya untuk memverifikasi tujuan.
Memuat Data ke dalam Tabel Kampanye

Tugas 3. Mengkueri data dengan library klien

Fungsi query_data() di snippets.py dapat digunakan untuk mengkueri database Anda. Dalam kasus ini, Anda menggunakannya untuk mengonfirmasi data yang dimuat ke dalam tabel Campaigns. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def query_data(instance_id, database_id): """Queries sample data from the database using SQL.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: results = snapshot.execute_sql( "SELECT CampaignId,PortfolioId,CampaignStartDate,CampaignEndDate,CampaignName,CampaignBudget FROM Campaigns" ) for row in results: print(u"CampaignId: {}, PortfolioId: {}, CampaignStartDate: {}, CampaignEndDate: {}, CampaignName: {}, CampaignBudget: {}".format(*row))
  1. Jalankan snippets.py menggunakan argumen query_data untuk mengkueri tabel Campaigns.
python snippets.py banking-ops-instance --database-id banking-ops-db query_data

Halaman akan terlihat seperti berikut

CampaignId: 1, PortfolioId: 1, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: New Account Reward, CampaignBudget: 15000 CampaignId: 2, PortfolioId: 2, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Intro to Investments, CampaignBudget: 5000 CampaignId: 3, PortfolioId: 2, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Youth Checking Accounts, CampaignBudget: 25000 CampaignId: 4, PortfolioId: 3, CampaignStartDate: 2022-06-07, CampaignEndDate: 2022-06-07, CampaignName: Protect Your Family, CampaignBudget: 10000

Tugas 4. Memperbarui skema database

Sebagai bagian dari tanggung jawab DBA, Anda diwajibkan untuk menambahkan kolom baru bernama MarketingBudget ke tabel Category. Menambahkan kolom baru ke tabel yang ada memerlukan pembaruan pada skema database Anda. Cloud Spanner mendukung pembaruan skema ke database saat database terus melayani traffic. Pembaruan skema tidak memerlukan penghentian database dan tidak mengunci seluruh tabel atau kolom; Anda dapat terus membaca dan menulis data ke database selama pembaruan skema.

Menambahkan kolom menggunakan Python

Metode update_ddl() dari class Database digunakan untuk memodifikasi skema.

Gunakan fungsi add_column() di snippets.py yang mengimplementasikan metode tersebut. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def add_column(instance_id, database_id): """Adds a new column to the Albums table in the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( ["ALTER TABLE Category ADD COLUMN MarketingBudget INT64"] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the MarketingBudget column.")
  1. Jalankan snippets.py menggunakan argumen add_column.
python snippets.py banking-ops-instance --database-id banking-ops-db add_column
  1. Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan kolom ke tabel Category

Opsi lain untuk menambahkan kolom ke tabel yang ada meliputi:

Mengeluarkan perintah DDL melalui gcloud CLI.

Catatan: Opsi ini ditampilkan sebagai contoh alternatif. Jangan keluarkan perintah ini.

Contoh kode di bawah ini menyelesaikan tugas yang sama seperti yang baru saja Anda jalankan melalui Python.

gcloud spanner databases ddl update banking-ops-db --instance=banking-ops-instance --ddl='ALTER TABLE Category ADD COLUMN MarketingBudget INT64;'

Mengeluarkan perintah DDL di Konsol Cloud.

Catatan: Opsi ini ditampilkan sebagai contoh alternatif. Jangan lakukan tindakan ini.
  1. Klik nama tabel di daftar Database.
  2. Klik Write DDL di pojok kanan atas halaman.
  3. Tempelkan DDL yang sesuai di kotak DDL Templates.
  4. Klik Kirim.

AddColumnUI.png

Menulis data ke kolom baru

Kode berikut menulis data ke kolom baru. Kueri ini menetapkan MarketingBudget ke 100000 untuk baris dengan CategoryId 1 dan PortfolioId 1, serta ke 500000 untuk baris dengan CategoryId 3 dan PortfolioId 2. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def update_data(instance_id, database_id): """Updates sample data in the database. This updates the `MarketingBudget` column which must be created before running this sample. Anda dapat menambahkan kolom dengan menjalankan sampel `add_column` atau dengan menjalankan pernyataan DDL ini terhadap database Anda """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.batch() as batch: batch.update( table="Category", columns=("CategoryId", "PortfolioId", "MarketingBudget"), values=[(1, 1, 100000), (3, 2, 500000)], ) print("Updated data.")
  1. Jalankan snippets.py menggunakan argumen update_data.
python snippets.py banking-ops-instance --database-id banking-ops-db update_data
  1. Buat kueri tabel lagi untuk melihat pembaruan. Jalankan snippets.py menggunakan argumen query_data_with_new_column.
python snippets.py banking-ops-instance --database-id banking-ops-db query_data_with_new_column

Hasilnya adalah:

CategoryId: 1, PortfolioId: 1, MarketingBudget: 100000 CategoryId: 2, PortfolioId: 2, MarketingBudget: None CategoryId: 3, PortfolioId: 2, MarketingBudget: 500000 CategoryId: 4, PortfolioId: 3, MarketingBudget: None

Tugas 5. Menambahkan Indeks Sekunder

Misalkan Anda ingin mengambil semua baris Categories yang memiliki nilai CategoryNames dalam rentang tertentu. Anda dapat membaca semua nilai dari kolom CategoryName menggunakan pernyataan SQL atau panggilan baca, lalu membuang baris yang tidak memenuhi kriteria. Namun, melakukan pemindaian tabel penuh ini mahal, terutama untuk tabel dengan banyak baris. Sebagai gantinya, Anda dapat mempercepat pengambilan baris saat melakukan penelusuran berdasarkan kolom kunci non-primer dengan membuat indeks sekunder pada tabel.

Menambahkan indeks sekunder ke tabel yang ada memerlukan pembaruan skema. Seperti pembaruan skema lainnya, Cloud Spanner mendukung penambahan indeks saat database terus melayani traffic. Cloud Spanner mengisi indeks dengan data (juga dikenal sebagai "pengisian ulang") di balik layar. Pengisian ulang mungkin memerlukan waktu beberapa menit untuk diselesaikan, tetapi Anda tidak perlu menghentikan database atau menghindari penulisan ke tabel atau kolom tertentu selama proses ini.

Menambahkan indeks sekunder menggunakan library klien Python

Gunakan metode add_index() untuk membuat indeks sekunder. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def add_index(instance_id, database_id): """Adds a simple index to the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( ["CREATE INDEX CategoryByCategoryName ON Category(CategoryName)"] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the CategoryByCategoryName index.")
  1. Jalankan snippets.py menggunakan argumen add_index.
python snippets.py banking-ops-instance --database-id banking-ops-db add_index
  1. Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan indeks sekunder ke tabel Category

Membaca menggunakan indeks

Untuk membaca menggunakan indeks, panggil variasi metode read() dengan indeks yang disertakan. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def read_data_with_index(instance_id, database_id): """Reads sample data from the database using an index. """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: keyset = spanner.KeySet(all_=True) results = snapshot.read( table="Category", columns=("CategoryId", "CategoryName"), keyset=keyset, index="CategoryByCategoryName", ) for row in results: print("CategoryId: {}, CategoryName: {}".format(*row))
  1. Jalankan snippets.py menggunakan argumen read_data_with_index.
python snippets.py banking-ops-instance --database-id banking-ops-db read_data_with_index

Hasilnya akan terlihat seperti ini:

CategoryId: 3, CategoryName: Annuities CategoryId: 1, CategoryName: Cash CategoryId: 2, CategoryName: Investments - Short Return CategoryId: 4, CategoryName: Life Insurance

Menambahkan indeks dengan klausa STORING

Anda mungkin telah memperhatikan bahwa contoh pembacaan di atas tidak menyertakan pembacaan kolom MarketingBudget. Hal ini disebabkan oleh antarmuka baca Cloud Spanner yang tidak mendukung kemampuan untuk menggabungkan indeks dengan tabel data guna mencari nilai yang tidak disimpan dalam indeks.

Untuk melewati batasan ini, buat definisi alternatif indeks CategoryByCategoryName yang menyimpan salinan MarketingBudget di indeks.

Gunakan metode update_ddl() dari class Database untuk menambahkan indeks dengan klausa STORING. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def add_storing_index(instance_id, database_id): """Adds an storing index to the example database.""" spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) operation = database.update_ddl( [ "CREATE INDEX CategoryByCategoryName2 ON Category(CategoryName)" "STORING (MarketingBudget)" ] ) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) print("Added the CategoryByCategoryName2 index.")
  1. Jalankan snippets.py menggunakan argumen add_storing_index.
python snippets.py banking-ops-instance --database-id banking-ops-db add_storing_index

Sekarang Anda dapat menjalankan pembacaan yang mengambil kolom CategoryId, CategoryName, dan MarketingBudget saat menggunakan indeks CategoryByCategoryName2. Anda tidak akan mengubah kode apa pun, bagian ini ditampilkan di sini sebagai referensi Anda.

def read_data_with_storing_index(instance_id, database_id): """Reads sample data from the database using an index with a storing clause. """ spanner_client = spanner.Client() instance = spanner_client.instance(instance_id) database = instance.database(database_id) with database.snapshot() as snapshot: keyset = spanner.KeySet(all_=True) results = snapshot.read( table="Category", columns=("CategoryId", "CategoryName", "MarketingBudget"), keyset=keyset, index="CategoryByCategoryName2", ) for row in results: print(u"CategoryNameId: {}, CategoryName: {}, " "MarketingBudget: {}".format(*row))
  1. Jalankan snippets.py menggunakan argumen read_data_with_storing_index.
python snippets.py banking-ops-instance --database-id banking-ops-db read_data_with_storing_index

Hasilnya adalah

CategoryNameId: 3, CategoryName: Annuities, MarketingBudget: 500000 CategoryNameId: 1, CategoryName: Cash, MarketingBudget: 100000 CategoryNameId: 2, CategoryName: Investments - Short Return, MarketingBudget: None CategoryNameId: 4, CategoryName: Life Insurance, MarketingBudget: None

Tugas 6. Memeriksa Paket kueri

Di bagian ini, Anda akan mempelajari Paket Kueri Cloud Spanner.

  1. Kembali ke Konsol Cloud, yang seharusnya masih berada di tab Query Spanner Studio. Hapus kueri yang ada, tempel, dan Jalankan kueri berikut:
SELECT Name, ShortName, CategoryName FROM Portfolio INNER JOIN Category ON Portfolio.PortfolioId = Category.PortfolioId;
  1. Hasilnya akan terlihat seperti ini:

PlanQuery.png

Proses Kueri

Kueri SQL di Cloud Spanner pertama-tama dikompilasi menjadi rencana eksekusi, lalu dikirim ke server root awal untuk dieksekusi. Server root dipilih untuk meminimalkan jumlah hop untuk mencapai data yang dikueri. Server root kemudian:

  • Memulai eksekusi sub-paket jarak jauh (jika diperlukan)
  • Menunggu hasil dari eksekusi jarak jauh
  • Menangani langkah eksekusi lokal yang tersisa seperti mengagregasi hasil
  • Menampilkan hasil untuk kueri

Server jarak jauh yang menerima sub-paket bertindak sebagai server "root" untuk sub-paket mereka, mengikuti model yang sama dengan server root teratas. Hasilnya adalah hierarki eksekusi jarak jauh. Secara konseptual, alur eksekusi kueri berjalan dari atas ke bawah, dan hasil kueri ditampilkan dari bawah ke atas. Diagram berikut menunjukkan pola ini:

SPNPlan.png

Kueri Gabungan

Sekarang, mari kita lihat paket kueri untuk kueri gabungan.

  1. Di tab Query pada Spanner Studio, hapus kueri yang ada, tempel, dan Jalankan kueri berikut.
SELECT pr.ProductId, COUNT(*) AS ProductCount FROM Product AS pr WHERE pr.ProductId < 100 GROUP BY pr.ProductId;
  1. Setelah kueri selesai, klik tab Explanation di bawah isi kueri untuk memeriksa paket kueri.

Cloud Spanner mengirimkan rencana eksekusi ke server root yang mengoordinasikan eksekusi kueri dan melakukan distribusi jarak jauh sub-paket.

Rencana eksekusi ini dimulai dengan serialisasi yang mengurutkan semua nilai yang ditampilkan. Kemudian, rencana tersebut menyelesaikan operator gabungan hash awal untuk menghitung hasil awal. Kemudian, gabungan terdistribusi dijalankan, yang mendistribusikan sub-paket ke server jarak jauh yang pemisahannya memenuhi ProductId < 100. Gabungan terdistribusi mengirimkan hasil ke operator agregat hash akhir. Operator gabungan melakukan agregasi COUNT berdasarkan ProductId dan menampilkan hasil ke operator hasil serialisasi. Terakhir, pemindaian dilakukan untuk mengurutkan hasil yang akan ditampilkan.

Hasilnya akan terlihat seperti ini:

SPNAggPlan.png

Tips:Untuk mendapatkan detail selengkapnya untuk setiap langkah dalam paket kueri, klik salah satu operator dan sisi kanan layar akan berubah sesuai dengan operator yang dipilih.

SPNPlanDetail.png

Kueri gabungan yang ditempatkan bersama

Tabel yang disisipkan disimpan secara fisik dengan baris tabel terkait yang ditempatkan bersama. Penggabungan antara tabel yang disisipkan dikenal sebagai penggabungan yang ditempatkan bersama. Penggabungan yang ditempatkan bersama dapat menawarkan keunggulan performa dibandingkan penggabungan yang memerlukan indeks atau penggabungan kembali.

  1. Di tab Query pada Spanner Studio, hapus kueri yang ada, tempel, dan Jalankan kueri berikut.
SELECT c.CategoryName, pr.ProductName FROM Category AS c, Product AS pr WHERE c.PortfolioId = pr.PortfolioId AND c.CategoryId = pr.CategoryId;
  1. Setelah kueri selesai, klik tab Explanation di bawah isi kueri untuk memeriksa paket kueri.

Rencana eksekusi ini dimulai dengan gabungan terdistribusi, yang mendistribusikan sub-paket ke server jarak jauh yang memiliki pemisahan tabel Category. Karena Product adalah tabel yang disisipkan dari Category, setiap server jarak jauh dapat menjalankan seluruh sub-paket di setiap server jarak jauh tanpa memerlukan penggabungan ke server lain.

Sub-paket berisi cross apply. Setiap cross apply melakukan pemindaian tabel pada tabel Category untuk mengambil PortfolioId, CategoryId, dan CategoryName. Cross apply kemudian memetakan output dari pemindaian tabel ke output dari pemindaian indeks pada indeks CategoryByCategoryName, yang tunduk pada filter PortfolioId dalam indeks yang cocok dengan PortfolioId dari output pemindaian tabel. Setiap cross apply mengirimkan hasilnya ke operator serialize result yang menserialkan data CategoryName dan ProductName serta mengembalikan hasil ke gabungan terdistribusi lokal. Penggabungan terdistribusi mengagregasi hasil dari penggabungan terdistribusi lokal dan menampilkannya sebagai hasil kueri.

SPNColocated.png

Selamat!

Anda kini memiliki pemahaman yang solid tentang fitur terkait skema Cloud Spanner serta metode yang digunakan Spanner untuk membuat paket kueri.

Sertifikasi dan pelatihan Google Cloud

...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.

Manual Terakhir Diperbarui pada 14 Oktober 2024

Lab Terakhir Diuji pada 14 Oktober 2024

Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.

Sebelum memulai

  1. Lab membuat project dan resource Google Cloud untuk jangka waktu tertentu
  2. Lab memiliki batas waktu dan tidak memiliki fitur jeda. Jika lab diakhiri, Anda harus memulainya lagi dari awal.
  3. Di kiri atas layar, klik Start lab untuk memulai

Gunakan penjelajahan rahasia

  1. Salin Nama Pengguna dan Sandi yang diberikan untuk lab tersebut
  2. Klik Open console dalam mode pribadi

Login ke Konsol

  1. Login menggunakan kredensial lab Anda. Menggunakan kredensial lain mungkin menyebabkan error atau dikenai biaya.
  2. Setujui persyaratan, dan lewati halaman resource pemulihan
  3. Jangan klik End lab kecuali jika Anda sudah menyelesaikan lab atau ingin mengulanginya, karena tindakan ini akan menghapus pekerjaan Anda dan menghapus project

Konten ini tidak tersedia untuk saat ini

Kami akan memberi tahu Anda melalui email saat konten tersedia

Bagus!

Kami akan menghubungi Anda melalui email saat konten tersedia

Satu lab dalam satu waktu

Konfirmasi untuk mengakhiri semua lab yang ada dan memulai lab ini

Gunakan penjelajahan rahasia untuk menjalankan lab

Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Langkah ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.