Menjalankan tugas BigQuery secara paralel dengan Workflows

1. Pengantar

1c05e3d0c2bd2b45.png 74be7b376d45258a.png

Workflows adalah layanan orkestrasi terkelola sepenuhnya yang menjalankan layanan Google Cloud atau layanan eksternal dalam urutan yang Anda tentukan.

BigQuery adalah data warehouse perusahaan yang terkelola sepenuhnya yang 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. Kemudian, Anda akan melihat cara menjalankan beberapa kueri BigQuery satu demi satu secara berurutan, sebagai bagian dari orkestrasi Workflows. Terakhir, Anda akan memparalelkan kueri menggunakan fitur iterasi paralel Workflows untuk peningkatan kecepatan hingga 5x.

Yang akan Anda pelajari

  • Cara menjalankan kueri BigQuery terhadap set data Wikipedia.
  • Cara menjalankan beberapa kueri sebagai bagian dari orkestrasi Workflows secara berurutan.
  • Cara memparalelkan kueri menggunakan iterasi paralel Workflows untuk peningkatan kecepatan hingga 5x.

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (biasanya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat 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.
  1. 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. Guna 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:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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. Menjelajahi set data Wikipedia

Pertama, jelajahi set data Wikipedia di BigQuery.

Buka bagian BigQuery di Konsol Google Cloud:

ea75ab12a7c012a4.png

Di bagian bigquery-samples, Anda akan melihat berbagai set data publik, termasuk beberapa set data terkait Wikipedia:

c9484e305b8e1438.png

Di bagian set data wikipedia_pageviews, Anda dapat melihat berbagai tabel untuk tayangan halaman dari tahun yang berbeda:

c540a4162640cbb3.png

Anda dapat memilih salah satu tabel (misalnya, 201207) dan pratinjau data:

b5b2a334cd6f63c0.png

Anda juga dapat menjalankan kueri terhadap tabel. Misalnya, kueri ini memilih 100 judul teratas dengan jumlah penayangan 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, data akan dimuat dalam waktu sekitar 20 detik:

1df3877aed1653b4.png

4. Menentukan alur kerja untuk menjalankan beberapa kueri

Menjalankan kueri pada satu tabel sangatlah mudah. Namun, menjalankan beberapa kueri terhadap beberapa tabel dan mengumpulkan hasilnya bisa sangat membosankan. Untuk membantu hal ini, Workflows dapat membantu dengan sintaksis iterasi-nya.

Di dalam Cloud Shell, buat file workflow-serial.yaml untuk membuat alur kerja guna menjalankan beberapa kueri terhadap beberapa tabel:

touch workflow-serial.yaml

Kemudian, Anda dapat mengedit file dengan editor di Cloud Shell:

33bf9325b078ad8.png

Di dalam file workflow-serial.yaml, pada langkah init pertama, buat peta results untuk melacak setiap iterasi yang dikelompokkan berdasarkan nama tabel. Tentukan juga array tables dengan daftar tabel yang ingin Anda jalankan kuerinya. 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 konektor BigQuery Workflows untuk menjalankan kueri guna menemukan 100 judul teratas dengan tayangan halaman terbanyak di setiap tabel. Kemudian, judul dan penayangan teratas dari setiap tabel disimpan dalam 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 harus memastikan Workflows API 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

Terakhir, Anda siap menjalankan alur kerja.

Temukan alur kerja bigquery-serial di bagian Workflows di Cloud Console, lalu klik tombol Execute:

b6afa4747680334f.png

Atau, Anda juga dapat menjalankan alur kerja dengan gcloud di Cloud Shell:

gcloud workflows run bigquery-serial

Anda akan melihat eksekusi alur kerja berlangsung sekitar 1 menit (20 detik untuk setiap 5 tabel).

Pada akhirnya, Anda akan melihat output dari setiap tabel dengan judul dan penayangan teratas:

304d11a5bffdada4.png

baf31533d3671c9e.png

6. Memparalelkan beberapa kueri dengan 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 dapat menjalankannya secara paralel menggunakan fitur iterasi paralel Workflows.

Salin file workflow-serial.yaml ke file workflow-parallel.yaml baru. Dalam file baru, Anda akan melakukan beberapa perubahan untuk mengubah langkah berurutan menjadi langkah paralel.

Dalam 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. Hal ini memungkinkan variabel 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 sekitar 20 detik. Hal ini karena kelima kueri berjalan secara paralel. Peningkatan kecepatan hingga 5x hanya dengan mengubah beberapa baris kode.

Pada akhirnya, Anda akan melihat output yang sama dari setiap tabel dengan judul dan penayangan teratas, tetapi dengan waktu eksekusi yang jauh lebih singkat:

1825d49ef225c828.png

7. Selamat

Selamat, Anda telah menyelesaikan codelab! Untuk mempelajari lebih lanjut, lihat dokumentasi Workflows tentang langkah paralel.

Yang telah kita bahas

  • Cara menjalankan kueri BigQuery terhadap set data Wikipedia.
  • Cara menjalankan beberapa kueri sebagai bagian dari orkestrasi Workflows secara berurutan.
  • Cara memparalelkan kueri menggunakan iterasi paralel Workflows untuk peningkatan kecepatan hingga 5x.