GSP1050

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
-
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
-
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.
-
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.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab Details.
-
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.
-
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.
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.
-
Klik Activate Cloud Shell
di bagian atas Konsol Google Cloud.
-
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.
- (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
- Klik Authorize.
Output:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
Untuk menetapkan akun aktif, jalankan:
$ gcloud config set account `ACCOUNT`
- (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).
-
Dari Konsol Cloud, buka menu navigasi (
) > View All Products, lalu di bagian Databases, klik Spanner.
-
Nama instance-nya adalah banking-ops-instance, klik nama tersebut untuk menjelajahi database.
-
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.
-
Di panel kiri Konsol, klik Spanner Studio. Kemudian, klik tombol + New SQL Editor Tab di frame kanan.
-
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");
-
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.
-
Klik Clear di bagian atas halaman.
-
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");
-
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.
-
Klik Clear di bagian atas halaman.
-
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");
-
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.
-
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.
- 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
- 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
- Buat lingkungan Python yang terisolasi dan instal dependensi untuk klien Cloud Spanner.
pip install -r requirements.txt
pip install setuptools
-
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
- 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))
- 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.")
- Jalankan snippets.py menggunakan argumen add_column.
python snippets.py banking-ops-instance --database-id banking-ops-db add_column
- 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.
- Klik nama tabel di daftar Database.
- Klik Write DDL di pojok kanan atas halaman.
- Tempelkan DDL yang sesuai di kotak DDL Templates.
- Klik Kirim.

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.")
- Jalankan snippets.py menggunakan argumen update_data.
python snippets.py banking-ops-instance --database-id banking-ops-db update_data
- 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.")
- Jalankan snippets.py menggunakan argumen add_index.
python snippets.py banking-ops-instance --database-id banking-ops-db add_index
- 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))
- 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.")
- 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))
- 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.
- 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;
- Hasilnya akan terlihat seperti ini:

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:

Kueri Gabungan
Sekarang, mari kita lihat paket kueri untuk kueri gabungan.
- 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;
- 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:

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.

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.
- 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;
- 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.

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.