1. Pengantar
Workflows adalah layanan orkestrasi terkelola sepenuhnya yang menjalankan Google Cloud atau layanan eksternal sesuai urutan yang Anda tentukan.
BigQuery adalah data warehouse perusahaan yang terkelola sepenuhnya untuk membantu Anda mengelola dan menganalisis data berukuran terabyte dengan fitur bawaan seperti machine learning, analisis geospasial, dan business intelligence.
Dalam codelab ini, Anda akan menjalankan beberapa kueri BigQuery terhadap set data Wikipedia publik. Anda kemudian akan melihat cara menjalankan beberapa kueri BigQuery satu per satu secara serial, sebagai bagian dari orkestrasi Workflows. Terakhir, Anda akan memparalelkan kueri menggunakan fitur iterasi paralel dari Workflows untuk peningkatan kecepatan hingga 5x lipat.
Yang akan Anda pelajari
- Cara menjalankan kueri BigQuery pada {i>dataset<i} Wikipedia.
- Cara menjalankan beberapa kueri sebagai bagian dari orkestrasi Workflows secara serial.
- Cara memparalelkan kueri menggunakan iterasi paralel Workflows untuk peningkatan kecepatan hingga 5x lipat.
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 harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak
peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai
PROJECT_ID
). Jika Anda tidak menyukai ID yang dihasilkan, 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 akan tetap ada 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 seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. 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. Jelajahi {i>dataset<i} Wikipedia
Pertama, jelajahi {i>dataset <i}Wikipedia di BigQuery.
Buka bagian BigQuery di Konsol Google Cloud:
Di bawah bigquery-samples
, Anda akan melihat berbagai set data publik, termasuk beberapa set data terkait Wikipedia:
Di bawah set data wikipedia_pageviews
, Anda dapat melihat berbagai tabel untuk tayangan halaman dari tahun-tahun yang berbeda:
Anda dapat memilih salah satu tabel (misalnya, 201207
) dan lihat pratinjau data:
Anda juga dapat menjalankan kueri terhadap tabel. Misalnya, kueri ini memilih 100 judul teratas dengan tampilan terbanyak:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Setelah Anda menjalankan kueri, perlu waktu sekitar 20 detik untuk memuat data:
4. Menentukan alur kerja untuk menjalankan beberapa kueri
Menjalankan kueri terhadap satu tabel itu mudah. Namun, menjalankan beberapa kueri terhadap beberapa tabel dan menyusun hasilnya bisa sangat membosankan. Untuk membantu hal ini, Workflows dapat membantu dengan sintaksis iterasi.
Di dalam Cloud Shell, buat file workflow-serial.yaml
untuk membangun alur kerja guna menjalankan beberapa kueri terhadap beberapa tabel:
touch workflow-serial.yaml
Kemudian, Anda dapat mengedit file dengan editor di Cloud Shell:
Di dalam file workflow-serial.yaml
, pada langkah init
pertama, buat peta results
untuk melacak setiap iterasi yang dikunci dengan nama tabel. Tentukan juga array tables
dengan daftar tabel yang ingin Anda gunakan untuk menjalankan kueri. Dalam hal ini, kita memilih 5 tabel:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
Selanjutnya, tentukan langkah runQueries
. Langkah ini melakukan iterasi pada setiap tabel dan menggunakan Workflows' Konektor BigQuery untuk menjalankan kueri guna menemukan 100 judul teratas dengan kunjungan halaman terbanyak di setiap tabel. Kemudian cara ini menyimpan judul dan tampilan teratas dari setiap tabel di peta hasil:
- runQueries: for: value: table in: ${tables} steps: - runQuery: call: googleapis.bigquery.v2.jobs.query args: projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} body: useLegacySql: false useQueryCache: false timeoutMs: 30000 # Find the top 100 titles with most views on Wikipedia query: ${ "SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews." + table + "` WHERE LENGTH(TITLE) > 10 GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100" } result: queryResult - returnResult: assign: # Return the top title from each table - results[table]: {} - results[table].title: ${queryResult.rows[0].f[0].v} - results[table].views: ${queryResult.rows[0].f[1].v}
Pada langkah terakhir, tampilkan peta results
:
- returnResults: return: ${results}
5. Menjalankan beberapa kueri dengan Workflows
Sebelum dapat men-deploy dan menjalankan alur kerja, Anda perlu memastikan Workflows API sudah diaktifkan. Anda dapat mengaktifkannya dari Konsol Google Cloud atau menggunakan gcloud
di Cloud Shell:
gcloud services enable workflows.googleapis.com
Buat akun layanan untuk Workflows:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Pastikan akun layanan memiliki peran untuk mencatat dan menjalankan tugas BigQuery:
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Deploy alur kerja dengan akun layanan:
gcloud workflows deploy bigquery-serial \ --source=workflow-serial.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Akhirnya, Anda siap untuk menjalankan alur kerja tersebut.
Temukan alur kerja bigquery-serial
di bagian Workflows pada Konsol Cloud dan tekan tombol Execute
:
Atau, Anda juga dapat menjalankan alur kerja dengan gcloud
di Cloud Shell:
gcloud workflows run bigquery-serial
Anda akan melihat eksekusi alur kerja yang berlangsung sekitar 1 menit (20 detik untuk masing-masing dari 5 tabel).
Pada akhirnya, Anda akan melihat hasil dari setiap tabel dengan judul dan tampilan teratas:
6. Paralelkan beberapa kueri dengan langkah-langkah paralel
Alur kerja pada langkah sebelumnya memerlukan waktu sekitar 1 menit karena menjalankan 5 kueri yang masing-masing memerlukan waktu 20 detik. Karena ini adalah kueri independen, Anda sebenarnya dapat menjalankannya secara paralel menggunakan fitur iterasi paralel dari Workflows.
Salin file workflow-serial.yaml
ke file workflow-parallel.yaml
baru. Di file baru, Anda akan membuat beberapa perubahan untuk mengubah langkah serial menjadi langkah paralel.
Di file workflow-parallel.yaml
, ubah langkah runQueries
. Pertama, tambahkan kata kunci parallel
. Hal ini memungkinkan setiap iterasi loop for berjalan secara paralel. Kedua, deklarasikan variabel results
sebagai variabel shared
. Fungsi ini memungkinkan variabel untuk dapat ditulis oleh cabang. Kita akan menambahkan setiap hasil ke variabel ini.
- runQueries: parallel: shared: [results] for: value: table in: ${tables}
Deploy alur kerja paralel:
gcloud workflows deploy bigquery-parallel \ --source=workflow-parallel.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Jalankan alur kerja:
gcloud workflows run bigquery-parallel
Anda akan melihat eksekusi alur kerja berlangsung selama sekitar 20 detik. Hal ini terjadi karena kelima kueri berjalan secara paralel. Kecepatan peningkatan hingga 5x lipat dengan hanya beberapa baris perubahan kode.
Pada akhirnya, Anda akan melihat {i>output<i} yang sama dari setiap tabel dengan judul dan tampilan teratas tetapi dengan waktu eksekusi yang jauh lebih singkat:
7. Selamat
Selamat, Anda telah menyelesaikan codelab! Untuk mempelajari lebih lanjut, lihat Dokumentasi alur kerja tentang langkah-langkah paralel.
Yang telah kita bahas
- Cara menjalankan kueri BigQuery pada {i>dataset<i} Wikipedia.
- Cara menjalankan beberapa kueri sebagai bagian dari orkestrasi Workflows secara serial.
- Cara memparalelkan kueri menggunakan iterasi paralel Workflows untuk peningkatan kecepatan hingga 5x lipat.