Arsitektur
Diagram berikut menunjukkan arsitektur tingkat tinggi dari pipeline ekstrak, pemuatan, dan transformasi (ELT) tanpa server menggunakan Alur kerja.
Pada diagram sebelumnya, pertimbangkan platform retail yang secara berkala mengumpulkan peristiwa penjualan sebagai file dari berbagai toko, lalu menulis file tersebut ke bucket Cloud Storage. Peristiwa tersebut digunakan untuk menyediakan metrik bisnis dengan mengimpor dan memprosesnya di BigQuery. Arsitektur ini menyediakan sistem orkestrasi yang andal dan serverless untuk mengimpor file Anda ke BigQuery, dan dibagi menjadi dua modul berikut:
- Daftar file: Menyimpan daftar file yang belum diproses yang ditambahkan ke bucket Cloud Storage dalam koleksi Firestore.
Modul ini berfungsi melalui Cloud Function yang dipicu oleh peristiwa penyimpanan Object Finalize, yang dihasilkan saat file baru ditambahkan ke bucket Cloud Storage. Nama file ditambahkan ke array
files
dari koleksi yang bernamanew
di Firestore. Alur kerja: Menjalankan alur kerja terjadwal. Cloud Scheduler memicu alur kerja yang menjalankan serangkaian langkah sesuai dengan sintaksis berbasis YAML untuk mengatur pemuatan, kemudian mengubah data di BigQuery dengan memanggil Cloud Functions. Langkah-langkah dalam alur kerja memanggil Cloud Functions untuk menjalankan tugas-tugas berikut:
- Buat dan mulai tugas pemuatan BigQuery.
- Melakukan polling tentang status tugas pemuatan.
- Buat dan mulai tugas kueri transformasi.
- Melakukan polling tentang status tugas transformasi.
Menggunakan transaksi untuk mengelola daftar file baru di Firestore membantu memastikan bahwa tidak ada file yang terlewat saat alur kerja mengimpornya ke BigQuery. Operasi yang terpisah dari alur kerja dibuat idempoten dengan menyimpan metadata dan status tugas di Firestore.
Tujuan
- Membuat database Firestore.
- Siapkan pemicu Cloud Function untuk melacak file yang ditambahkan ke bucket Cloud Storage di Firestore.
- Deploy Cloud Functions untuk menjalankan dan memantau tugas BigQuery.
- Deploy dan jalankan alur kerja untuk mengotomatiskan prosesnya.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build, Cloud Functions, Identity and Access Management, Resource Manager, and Workflows.
Buka halaman Welcome dan catat Project ID untuk digunakan di langkah selanjutnya.
Di konsol Google Cloud, aktifkan Cloud Shell.
Menyiapkan lingkungan Anda
Untuk menyiapkan lingkungan Anda, buat database Firestore, clone contoh kode dari repo GitHub, buat resource menggunakan Terraform, edit file YAML Workflows, dan persyaratan penginstalan untuk generator file.
Untuk membuat database Firestore, lakukan hal berikut:
Di konsol Google Cloud, buka halaman Firestore.
Klik Pilih mode native.
Di menu Select a location, pilih region tempat Anda ingin menghosting database Firestore. Sebaiknya pilih wilayah yang dekat dengan lokasi fisik Anda.
Klik Buat database.
Pada Cloud Shell, clone repositori sumber:
cd $HOME && git clone https://github.com/GoogleCloudPlatform/workflows-demos cd workflows-demos/workflows-bigquery-load
Di Cloud Shell, buat resource berikut menggunakan Terraform:
terraform init terraform apply \ -var project_id=PROJECT_ID \ -var region=REGION \ -var zone=ZONE \ --auto-approve
Ganti kode berikut:
PROJECT_ID
: project ID Google Cloud AndaREGION
: lokasi geografis Google Cloud tertentu untuk menghosting resource Anda—misalnya,us-central1
ZONE
: lokasi dalam region untuk menghosting resource Anda—misalnya,us-central1-b
Anda akan melihat pesan yang mirip dengan yang berikut ini:
Apply complete! Resources: 7 added, 0 changed, 1 destroyed.
Terraform dapat membantu Anda membuat, mengubah, dan mengupgrade infrastruktur dalam skala besar dengan aman dan dapat diprediksi. Resource berikut dibuat dalam project Anda:
- Akun layanan dengan hak istimewa yang diperlukan untuk memastikan akses yang aman ke resource Anda.
- Set data BigQuery bernama
serverless_elt_dataset
dan tabel bernamaword_count
untuk memuat file yang masuk. - Bucket Cloud Storage bernama
${project_id}-ordersbucket
untuk file input staging. - Lima Cloud Functions berikut:
file_add_handler
menambahkan nama file yang ditambahkan ke bucket Cloud Storage ke koleksi Firestore.create_job
membuat tugas pemuatan BigQuery baru dan mengaitkan file di koleksi Firebase dengan tugas tersebut.create_query
membuat tugas kueri BigQuery baru.poll_bigquery_job
mendapatkan status tugas BigQuery.run_bigquery_job
memulai tugas BigQuery.
Dapatkan URL untuk Cloud Functions
create_job
,create_query
,poll_job
, danrun_bigquery_job
yang Anda deploy pada langkah sebelumnya.gcloud functions describe create_job | grep url gcloud functions describe poll_bigquery_job | grep url gcloud functions describe run_bigquery_job | grep url gcloud functions describe create_query | grep url
Outputnya mirip dengan hal berikut ini:
url: https://REGION-PROJECT_ID.cloudfunctions.net/create_job url: https://REGION-PROJECT_ID.cloudfunctions.net/poll_bigquery_job url: https://REGION-PROJECT_ID.cloudfunctions.net/run_bigquery_job url: https://REGION-PROJECT_ID.cloudfunctions.net/create_query
Catat URL ini karena diperlukan saat Anda men-deploy alur kerja.
Membuat dan men-deploy alur kerja
Di Cloud Shell, buka file sumber untuk alur kerja,
workflow.yaml
:Ganti kode berikut:
CREATE_JOB_URL
: URL fungsi untuk membuat tugas baruPOLL_BIGQUERY_JOB_URL
: URL fungsi untuk memeriksa status tugas yang sedang berjalanRUN_BIGQUERY_JOB_URL
: URL fungsi untuk memulai tugas pemuatan BigQueryCREATE_QUERY_URL
: URL fungsi untuk memulai tugas kueri BigQueryBQ_REGION
: region BigQuery tempat data disimpan—misalnya,US
BQ_DATASET_TABLE_NAME
: nama tabel set data BigQuery dalam formatPROJECT_ID.serverless_elt_dataset.word_count
Deploy file
workflow
:gcloud workflows deploy WORKFLOW_NAME \ --location=WORKFLOW_REGION \ --description='WORKFLOW_DESCRIPTION' \ --service-account=workflow-runner@PROJECT_ID.iam.gserviceaccount.com \ --source=workflow.yaml
Ganti kode berikut:
WORKFLOW_NAME
: nama unik alur kerjaWORKFLOW_REGION
: region tempat alur kerja di-deploy—misalnya,us-central1
WORKFLOW_DESCRIPTION
: deskripsi alur kerja
Buat lingkungan virtual Python 3 dan persyaratan penginstalan untuk generator file:
sudo apt-get install -y python3-venv python3 -m venv env . env/bin/activate cd generator pip install -r requirements.txt
Buat file untuk diimpor
Skrip Python gen.py
menghasilkan konten acak dalam
format Avro. Skemanya sama dengan
tabel word_count
BigQuery. File Avro ini disalin ke bucket Cloud Storage yang ditentukan.
Di Cloud Shell, buat file:
python gen.py -p PROJECT_ID \ -o PROJECT_ID-ordersbucket \ -n RECORDS_PER_FILE \ -f NUM_FILES \ -x FILE_PREFIX
Ganti kode berikut:
RECORDS_PER_FILE
: jumlah data dalam satu fileNUM_FILES
: jumlah total file yang akan diuploadFILE_PREFIX
: awalan untuk nama file yang dihasilkan
Melihat entri file di Firestore
Setelah file disalin ke Cloud Storage, Cloud Function handle_new_file
akan terpicu. Fungsi ini menambahkan daftar file ke array daftar file dalam dokumen new
di koleksi jobs
Firestore.
Untuk melihat daftar file, di Konsol Google Cloud, buka halaman Data Firestore.
Memicu alur kerja
Workflows menautkan serangkaian tugas tanpa server dari layanan Google Cloud dan API. Setiap langkah dalam alur kerja ini dijalankan sebagai Cloud Functions dan statusnya disimpan di Firestore. Semua panggilan ke Cloud Functions diautentikasi menggunakan akun layanan dari alur kerja.
Di Cloud Shell, jalankan alur kerja:
gcloud workflows execute WORKFLOW_NAME
Diagram berikut menunjukkan langkah-langkah yang digunakan dalam alur kerja:
Alur kerja ini dibagi menjadi dua bagian: alur kerja utama dan sub-alur kerja. Alur kerja utama menangani pembuatan tugas dan eksekusi kondisional, sementara sub-alur kerja menjalankan tugas BigQuery. Alur kerja ini melakukan operasi berikut:
- Cloud Function
create_job
membuat objek tugas baru, mendapatkan daftar file yang ditambahkan ke Cloud Storage dari dokumen Firestore, dan mengaitkan file tersebut dengan tugas pemuatan. Jika tidak ada file untuk dimuat, fungsi tersebut tidak membuat tugas baru. - Cloud Function
create_query
mengambil kueri yang perlu dijalankan bersama dengan region BigQuery tempat kueri harus dieksekusi. Fungsi ini membuat tugas di Firestore dan menampilkan ID tugas. - Cloud Function
run_bigquery_job
mendapatkan ID tugas yang perlu dijalankan, lalu memanggil BigQuery API untuk mengirim tugas. - Daripada menunggu tugas selesai di Cloud Function, Anda dapat mengkueri status tugas secara berkala.
- Cloud Function
poll_bigquery_job
memberikan status tugas. Fungsi ini dipanggil berulang kali hingga tugas selesai. - Untuk menambahkan penundaan antar-panggilan ke Cloud Function
poll_bigquery_job
, rutinitassleep
dipanggil dari Workflows.
- Cloud Function
Melihat status pekerjaan
Anda dapat melihat daftar file dan status tugas.
Di Konsol Google Cloud, buka halaman Data Firestore.
ID unik (UUID) dibuat untuk setiap tugas. Untuk melihat
job_type
danstatus
, klik ID pekerjaan. Setiap pekerjaan mungkin memiliki salah satu jenis dan status berikut:job_type
: Jenis tugas yang sedang dijalankan oleh alur kerja dengan salah satu nilai berikut:- 0: Memuat data ke BigQuery.
- 1: Jalankan kueri di BigQuery.
status
: Status tugas saat ini dengan salah satu nilai berikut:- 0: Tugas telah dibuat, tetapi belum dimulai.
- 1: Tugas sedang berjalan.
- 2: Tugas berhasil menyelesaikan eksekusinya.
- 3: Terjadi kesalahan dan pekerjaan tidak berhasil diselesaikan.
Objek tugas juga berisi atribut metadata seperti region set data BigQuery, nama tabel BigQuery, dan jika berupa tugas kueri, string kueri yang sedang dijalankan.
Lihat data di BigQuery
Untuk mengonfirmasi bahwa tugas ELT berhasil, pastikan data muncul dalam tabel.
Di konsol Google Cloud, buka halaman Editor BigQuery.
Klik tabel
serverless_elt_dataset.word_count
.Klik tab Preview.
Menjadwalkan alur kerja
Untuk menjalankan alur kerja sesuai jadwal secara berkala, Anda dapat menggunakan Cloud Scheduler.
Pembersihan
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project Google Cloud yang Anda buat untuk tutorial ini. Atau, Anda dapat menghapus resource satu per satu.Menghapus resource satu per satu
Di Cloud Shell, hapus semua resource yang dibuat menggunakan Terraform:
cd $HOME/bigquery-workflows-load terraform destroy \ -var project_id=PROJECT_ID \ -var region=REGION \ -var zone=ZONE \ --auto-approve
Di Konsol Google Cloud, buka halaman Data Firestore.
Di samping Jobs, klik
Menu, lalu pilih Delete.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Untuk mempelajari BigQuery lebih lanjut, baca dokumentasi BigQuery.
- Pelajari cara membangun pipeline machine learning kustom serverless.
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.