1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara menggunakan Spanner Data Boost untuk membuat kueri data Spanner dari BigQuery menggunakan kueri gabungan zero-ETL dan tanpa memengaruhi database Spanner.

Spanner Data Boost adalah layanan serverless yang terkelola sepenuhnya dan menyediakan resource komputasi independen untuk workload Spanner yang didukung. Data Boost memungkinkan Anda menjalankan kueri analisis dan ekspor data dengan dampak yang hampir tidak ada ke workload yang ada di instance Spanner yang disediakan menggunakan model penggunaan sesuai permintaan tanpa server.
Jika dipasangkan dengan koneksi eksternal BigQuery, Peningkatan Data memungkinkan Anda membuat kueri data dari Spanner ke platform analisis data dengan mudah tanpa pemindahan data ETL yang rumit.
Prasyarat
- Pemahaman dasar tentang Konsol Google Cloud
- Keterampilan dasar dalam antarmuka command line dan Google shell
Yang akan Anda pelajari
- Cara men-deploy instance Spanner
- Cara memuat data untuk membuat database Spanner
- Cara mengakses data Spanner dari BigQuery tanpa Data Boost
- Cara mengakses data Spanner dari BigQuery dengan Data Boost
Yang Anda butuhkan
- Akun Google Cloud dan Project Google Cloud
- Browser web seperti Chrome
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Membuat instance dan database Spanner
Aktifkan Spanner API
Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)
Konfigurasi region default Anda ke us-central1. Anda dapat mengubahnya ke region lain yang didukung oleh konfigurasi regional Spanner.
gcloud config set compute/region us-central1
Aktifkan Spanner API:
gcloud services enable spanner.googleapis.com
Buat instance Spanner
Pada langkah ini, kita akan menyiapkan instance Spanner untuk codelab. Untuk melakukannya, buka Cloud Shell dan jalankan perintah ini:
export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Output perintah:
$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.
Membuat database
Setelah instance Anda berjalan, Anda dapat membuat database. Spanner memungkinkan beberapa database dalam satu instance.
Database adalah tempat Anda menentukan skema. Anda juga dapat mengontrol siapa yang memiliki akses ke database, menyiapkan enkripsi kustom, mengonfigurasi pengoptimal, dan menetapkan periode retensi.
Untuk membuat database, gunakan lagi alat command line gcloud:
export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Output perintah:
$ gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Creating database...done.
4. Muat data
Sebelum dapat menggunakan Peningkatan Data, Anda harus memiliki beberapa data di database. Untuk melakukannya, Anda akan membuat bucket Cloud Storage, mengupload impor Avro ke dalam bucket, dan memulai tugas impor Dataflow untuk memuat data Avro ke dalam Spanner.
Mengaktifkan API
Untuk melakukannya, buka perintah Cloud Shell jika perintah sebelumnya ditutup.
Pastikan untuk mengaktifkan Compute, Cloud Storage, dan Dataflow API.
gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Output konsol yang diharapkan:
$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.
Menyiapkan file impor di Cloud Storage
Sekarang, buat bucket untuk menyimpan file avro:
export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET
Output konsol yang diharapkan:
$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...
Selanjutnya, download file tar dari GitHub dan ekstrak.
wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz
Output konsol yang diharapkan:
$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - ‘spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001
Sekarang, upload file ke bucket yang Anda buat.
gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Output konsol yang diharapkan:
$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
Completed files 13/13 | 54.6MiB/54.6MiB
Average throughput: 46.4MiB/s
Impor Data
Dengan file di Cloud Storage, Anda dapat memulai tugas impor Dataflow untuk memuat data ke Spanner.
gcloud dataflow jobs run import_chatdb \
--gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
--region us-central1 \
--staging-location gs://$GCS_BUCKET/tmp \
--parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db
Output konsol yang diharapkan:
$ gcloud dataflow jobs run import_chatdb \
> --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
> --region us-central1 \
> --staging-location gs://$GCS_BUCKET/tmp \
> --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH
Anda dapat memeriksa status tugas impor dengan perintah ini.
gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1
Output konsol yang diharapkan:
$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID NAME TYPE CREATION_TIME STATE REGION
*snip* import_chatdb Batch 2024-04-*snip* Done us-central1
Memverifikasi data di Spanner
Sekarang, buka Spanner Studio dan pastikan data ada di sana. Pertama, luaskan tabel topik untuk melihat kolom.

Sekarang, jalankan kueri berikut untuk memastikan data tersedia:
SELECT COUNT(*) FROM topics;
Output yang diharapkan:

5. Membaca data dari BigQuery
Setelah memiliki data di Spanner, sekarang saatnya mengaksesnya dari dalam BigQuery. Untuk melakukannya, Anda akan menyiapkan koneksi eksternal ke Spanner di BigQuery.
Dengan asumsi Anda memiliki izin yang tepat, buat koneksi eksternal ke Spanner dengan langkah-langkah berikut.
Klik tombol 'Add' di bagian atas konsol BigQuery, lalu pilih opsi 'Connections to external data sources'.


Sekarang Anda dapat menjalankan kueri untuk membaca data dari Spanner. Jalankan kueri ini di konsol BigQuery, pastikan untuk mengganti nilai ${PROJECT_ID} Anda:
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Contoh output:

Anda dapat melihat informasi tentang tugas, seperti berapa lama waktu yang diperlukan untuk menjalankan dan berapa banyak data yang diproses di tab 'Informasi Tugas'.

Selanjutnya, Anda akan menambahkan koneksi Data Boost ke Spanner, dan membandingkan hasilnya.
6. Membaca data menggunakan Data Boost
Untuk menggunakan Spanner Data Boost, Anda harus membuat koneksi eksternal baru dari BigQuery ke Spanner. Klik 'Tambahkan' di konsol BigQuery, lalu pilih 'Connections from external data sources' lagi.
Isi detail dengan URI koneksi yang sama ke Spanner. Ubah 'ID Koneksi' dan centang kotak 'gunakan peningkatan data'.

Setelah koneksi Data Boost dibuat, Anda dapat menjalankan kueri yang sama, tetapi dengan nama koneksi baru. Sekali lagi, ganti project_id Anda dalam kueri.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Anda akan mendapatkan kumpulan hasil yang sama seperti sebelumnya. Apakah waktunya berubah?
7. Memahami Data Boost
Dengan Spanner Data Boost, Anda dapat menggunakan resource yang tidak terkait dengan resource instance Spanner Anda. Hal ini terutama mengurangi dampak workload analisis Anda terhadap workload operasional Anda.
Anda dapat melihatnya jika menjalankan kueri untuk tidak menggunakan Data Boost beberapa kali selama dua atau tiga menit. Jangan lupa mengganti ${PROJECT_ID}.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Kemudian, tunggu beberapa menit lagi, lalu jalankan kueri untuk menggunakan Data Boost beberapa kali lagi. Jangan lupa mengganti ${PROJECT_ID}.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
Sekarang, kembali ke Spanner Studio di Konsol Cloud, lalu buka System Insights

Di sini, Anda dapat melihat metrik CPU. Kueri yang dijalankan tanpa Data Boost menggunakan CPU untuk operasi 'executesql_select_withpartitiontoken'. Meskipun kuerinya sama, eksekusi Peningkatan Data tidak muncul pada pemakaian CPU instance Anda.

Dalam banyak kasus, performa kueri analitik akan meningkat saat menggunakan Peningkatan Data. Set data dalam tutorial ini kecil dan tidak ada beban kerja lain yang bersaing untuk mendapatkan resource. Oleh karena itu, tutorial ini tidak diharapkan untuk menunjukkan peningkatan performa.
Anda dapat bereksperimen dengan kueri dan workload serta melihat cara kerja Data Boost. Setelah selesai, lanjutkan ke bagian berikutnya untuk membersihkan lingkungan.
8. Membersihkan lingkungan
Jika Anda membuat project khusus untuk codelab ini, Anda cukup menghapus project tersebut untuk membersihkannya. Jika Anda ingin mempertahankan project, dan membersihkan setiap komponen, lanjutkan ke langkah-langkah berikut.
Menghapus koneksi BigQuery
Untuk menghapus kedua koneksi, klik tiga titik di samping nama koneksi. Pilih 'Hapus', lalu ikuti petunjuk untuk menghapus koneksi.

Menghapus bucket Cloud Storage
gcloud storage rm --recursive gs://$GCS_BUCKET
Menghapus instance Spanner
Untuk membersihkan, cukup buka bagian Cloud Spanner di Cloud Console dan hapus instance 'codelab-demo' yang kita buat di codelab.

9. Selamat
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Cara men-deploy instance Spanner
- Cara memuat data ke Spanner menggunakan Dataflow
- Cara mengakses data Spanner dari BigQuery
- Cara menggunakan Spanner Data Boost untuk menghindari dampak pada instance Spanner Anda untuk kueri analitis dari BigQuery
10. Survei
Output: