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 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 hampir nol terhadap workload yang ada pada instance Spanner yang disediakan menggunakan model penggunaan on-demand serverless.
Saat disambungkan dengan koneksi eksternal BigQuery, Data Boost memungkinkan Anda membuat kueri data dengan mudah dari Spanner ke platform analisis data tanpa perpindahan data ETL yang kompleks.
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
Mengaktifkan 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 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
Membuat 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 berjalan, Anda dapat membuat database. Spanner memungkinkan beberapa database pada satu instance.
{i>Database<i} adalah tempat Anda menentukan skema. Anda juga dapat mengontrol siapa saja yang memiliki akses ke database, menyiapkan enkripsi kustom, mengonfigurasi pengoptimal, dan menetapkan periode retensi.
Untuk membuat database, gunakan kembali 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 Spanner.
Mengaktifkan API
Untuk melakukannya, buka perintah Cloud Shell jika yang sebelumnya sudah ditutup.
Pastikan untuk mengaktifkan Compute API, 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.
Tahapan impor file 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, unduh file {i>tar<i} dari github dan ekstrak file tersebut.
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 tersedia. Pertama, luaskan tabel topik untuk melihat kolomnya.
Sekarang, jalankan kueri berikut untuk memastikan data tersedia:
SELECT COUNT(*) FROM topics;
Output yang diharapkan:
5. Membaca data dari BigQuery
Setelah Anda memiliki data di Spanner, saatnya untuk 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 'Tambahkan' di bagian atas konsol BigQuery, lalu pilih tombol 'Connections to eternal data sources' sebelumnya.
Anda kini dapat menjalankan kueri untuk membaca data dari Spanner. Jalankan kueri ini di konsol BigQuery, dan 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 pekerjaan tersebut, seperti berapa lama waktu yang dibutuhkan untuk menjalankan pekerjaan dan berapa banyak data yang diproses di bagian 'Informasi Pekerjaan' .
Selanjutnya, Anda akan menambahkan koneksi Data Boost ke Spanner, dan membandingkan hasilnya.
6. Membaca data menggunakan Peningkatan Data
Untuk menggunakan Spanner Data Boost, Anda perlu membuat koneksi eksternal baru dari BigQuery ke Spanner. Klik 'Tambahkan' di konsol BigQuery, lalu pilih 'Connections from external data sources
' untuk mencoba lagi perintah.
Isi detailnya dengan URI koneksi yang sama ke Spanner. Ubah 'ID Koneksi' dan centang kotak ‘gunakan data boost’ .
Setelah membuat koneksi Data Boost, 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 seharusnya mendapatkan hasil yang sama seperti sebelumnya. Apakah waktunya berubah?
7. Memahami Peningkatan Data
Spanner Data Boost memungkinkan Anda menggunakan resource yang tidak terkait dengan resource instance Spanner. Hal ini terutama akan mengurangi dampak beban kerja analisis pada workload operasional Anda.
Anda dapat melihat ini jika menjalankan kueri untuk tidak menggunakan Data Boost beberapa kali selama dua atau tiga menit. Jangan lupa untuk 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, dan jalankan kueri untuk menggunakan Data Boost beberapa kali lagi. Jangan lupa untuk 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 'executesql_select_withpartitiontoken' operasional bisnis. Meskipun kuerinya sama, eksekusi Data Boost tidak akan muncul di pemakaian CPU instance Anda.
Dalam banyak kasus, performa kueri analisis akan meningkat saat menggunakan Peningkatan Data. Set data dalam tutorial ini kecil dan tidak ada beban kerja lain yang bersaing untuk resource. Oleh karena itu, tutorial ini tidak diperkirakan akan menampilkan peningkatan performa.
Jangan ragu untuk bermain-main dengan kueri dan beban kerja serta melihat cara kerja Peningkatan Data. Setelah selesai, lanjutkan ke bagian berikutnya untuk membersihkan lingkungan.
8. Membersihkan lingkungan
Jika membuat project khusus untuk codelab ini, Anda dapat menghapus project tersebut untuk membersihkannya. Jika Anda ingin mempertahankan project, dan membersihkan masing-masing komponen, lanjutkan ke 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 membersihkannya, cukup buka bagian Cloud Spanner pada Konsol Cloud dan hapus ‘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 untuk kueri analisis dari BigQuery
10. Survei
Output: