Menjalankan tugas BigQuery secara paralel dengan Workflows

1. Pengantar

1c05e3d0c2bd2b45.pngS 74be7b376d45258a.pngS

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

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

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. Jelajahi {i>dataset<i} Wikipedia

Pertama, jelajahi {i>dataset <i}Wikipedia di BigQuery.

Buka bagian BigQuery di Konsol Google Cloud:

ea75ab12a7c012a4.png

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

c9484e305b8e1438.png

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

c540a4162640cbb3.png

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

b5b2a334cd6f63c0.png

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:

1df3877aed1653b4.pngS

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:

33bf9325b078ad8.pngS

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:

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 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:

304d11a5bffdada4.pngS

baf31533d3671c9e.png

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:

1825d49ef225c828.pngS

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.