Dataform dan BigQuery: Cara Mudah Membuat Pemrosesan Data Serverless di Google Cloud

Rendy B. Junior
Google Cloud Indonesia
6 min readJan 10, 2023

--

Penggunaan SQL query untuk pemrosesan data merupakan cara yang umum digunakan oleh data engineer, data scientist, terutama untuk data analyst. Bagi data analyst, SQL cenderung lebih mudah dipahami, terutama dibanding memprogram dalam bahasa Python misalnya. Ini merupakan alasan kenapa salah satu SQL-based data processing workflow seperti dbt semakin banyak penggunanya.

Google Cloud pun menyediakan service SQL-based workflow untuk pemrosesan data yang sudah serverless dan terintegrasi dengan mudah dengan BigQuery; namanya Dataform. Dalam blog ini, kita akan eksplorasi apa itu Dataform dan apa saja fiturnya.

Dataform Overview

Dataform diakuisisi oleh Google Cloud pada akhir tahun 2020 dengan visi one-stop data processing workflow tanpa perlu mempelajari maupun menginstal platform lain. Dataform menyediakan fungsi scheduling beserta dependency management; artinya kita bisa mendefinisikan bahwa job B akan dimulai jika job A sudah selesai (A adalah dependensi B). Dengan menggunakan Dataform, kita dapat mengaplikasikan best practice pengembangan mulai dari development, testing, dan deployment yang disertai version control, monitoring, dan logging.

Dikutip dari blog https://cloud.google.com/blog/products/data-analytics/welcoming-dataform-to-bigquery

Sebagai perbandingan, biasanya untuk membuat arsitektur pemrosesan data kita perlu menginstal tools lain seperti Apache Airflow, mempelajari cara penggunaannya, lalu memprogram dependensi pemrosesan data dalam kode Python. Selain itu, untuk testing dan version control kita perlu membuat script sendiri, misal di Github Action atau Cloud Build. Tapi dengan Dataform, kita bisa menyederhanakan semuanya jadi terpusat di Dataform; kolaborasi antar pengembang atau data analyst bisa dilakukan dengan mudah.

Kita pun tidak perlu membuat dan memonitor cluster lagi karena Dataform ini serverless. Selain itu, Dataform gratis untuk digunakan karena merupakan bagian dari service BigQuery. Saat ini, Dataform ada dalam status preview. Untuk lebih jelasnya, kita coba bahas fiturnya satu per satu.

Repository dan Workspace

Repository adalah tempat semua code dan version control akan disimpan. Workspace adalah salinan dari repository yang dapat kamu edit tanpa khawatir mengganggu yang lain, analogi paling dekat dengan git adalah “branch”. Repository dapat disambungkan dengan git repository yang kamu miliki.

Pengeditan kode bisa dilakukan di dalam workspace maupun di local. Bila dilakukan di local, maka pada akhirnya perlu dilakukan push ke workspace untuk bisa di-deploy. Berikut gambaran seperti apa workspace itu. File editor ada pada panel kiri, sedangkan kode SQL ada pada panel kanan.

SQLX dan Config Blocks

Setiap table dan view di dalam BigQuery direpresentasikan dalam sebuah file SQLX di dalam Dataform. Dalam sebuah file SQLX, terdapat dua bagian: 1) config blocks, dan 2) SQL statement. Dalam config blocks, di dalam `type` kita bisa mengkonfigurasi tipe datanya, apakah view atau table. Jika table, maka akan ditulis dalam bentuk BigQuery table, sedangkan jika view maka tidak akan ditulis datanya, hanya sebagai view saja.

Dokumentasi Data di Dalam SQLX

Selain `type` table atau view, kita bisa lihat pada contoh diatas ada `columns`. Dalam config `columns`, kita bisa mendefinisikan deskripsi dari masing-masing kolom pada table yang kita miliki. Kita juga dapat menaruh deskripsi table di dalam config dengan kata kunci `description`. Dengan begini, dokumentasi data tidak perlu alat terpisah, bisa langsung di dalam kodenya.

Deskripsi tabel dan kolom akan terintegrasi langsung dengan BigQuery beserta Data Catalog pada GCP (sekarang bagian dari DataPlex). Dengan begitu, pengguna data dapat melakukan pencarian data dengan mudah serta dapat mengerti konteks terkait data yang disediakan. Perubahan definisi pun akan terekam dengan baik dengan adanya version control.

Data Catalog di dalam DataPlex

Mendefinisikan Dependensi

Dalam Dataform, kamu tidak perlu membuat kode Python untuk mendefinisikan dependensi. Kamu hanya perlu menggunakan fungsi `ref()`. Contoh di bawah ini menunjukkan bahwa view `second_view` bergantung pada hasil dari view `first_view`. Cara pendefinisian seperti ini jauh lebih sederhana bagi data analyst pengguna SQL dibanding dengan menulis kode Python dependensi eksplisit seperti pada Airflow.

Selain dengan menggunakan cara tersebut, kita dapat mendeklarasikan sumber data (misal copy dari database MySQL production) dengan membuat file SQLX terpisah untuk setiap tabel. Contohnya dapat dilihat di bawah ini.

Menjalankan Workflow

Untuk menjalankan workflow, kita dapat memilih untuk menjalankan seluruhnya atau menjalankan task tertentu saja. Kita dapat memilih task tertentu secara manual atau filter dengan menggunakan tags. Setelah berjalan, kita dapat memonitor status masing-masing action dan melakukan cancel bila perlu.

Version Control

Dalam workspace, kita dapat melakukan operasi yang biasa kita lakukan dalam git. Kita bisa buat commit untuk perubahan yang kita lakukan, lalu kita bisa push ke git repository. Setelah push ke branch kita, kita bisa membuat pull request untuk merge ke main branch. Integrasi dengan version control jadi seamless dan tidak perlu terminal command. Ini lebih user friendly untuk pengguna yang tidak biasa memprogram.

Testing dan Data Quality

Seringkali kita memiliki tabel penting yang perlu dimonitor apakah terdapat duplikasi, ada data kosong atau tidak, atau kondisi lainnya seperti apakah total price minus atau tidak. Hal tersebut dapat didefinisikan di dalam assertions. Pada contoh di bawah, duplikasi dicek dengan menggunakan uniqueKey, sedangkan data kosong dicek dengan menggunakan nonNull. Untuk pengecekan yang lebih spesifik per baris, dapat menggunakan rowConditions.

Fitur Lainnya

  • Partition and clustering: Salah satu praktik umum dalam BigQuery adalah partition dan cluster. Kamu bisa mendefinisikan table partition dan cluster dalam config blocks dalam SQLX.
  • Incremental table: Untuk performa, kadang kita hanya memproses perubahan data pada hari tersebut saja. Ini disupport Dataform dalam bentuk incremental table.
  • Custom SQL Operation: Jika ada operasi SQL yang perlu dijalankan, misalkan DELETE, maka dapat menggunakan custom SQL operations dengan `type` operations.
  • Javascript file: Beberapa hal sulit diekspresikan dalam SQL, kamu dapat mencoba mengkode logika tersebut dalam Javascript.

Quickstart dan Troubleshooting

Untuk mencoba Dataform, bisa mengikuti petunjuk pada laman ini. Beberapa hal yang mungkin menjadi masalah:

  • Buatlah BigQuery dataset `dataform` pada project yang kamu pilih, samakan lokasinya dengan lokasi saat membuat repository.
  • Berikan akses BigQuery Data Editor, Data Viewer, dan Job User kepada service account Dataform pada laman konfigurasi IAM.

Penutup

Dataform layak dicoba dan dipertimbangkan karena banyak faktor. Pertama, Dataform sudah mengaplikasikan best practice yang biasa digunakan dalam pengembangan pemrosesan data, sehingga data yang dihasilkan bisa lebih berkualitas dan dapat dipercaya. Kedua, Dataform yang serverless menyederhanakan arsitektur dengan tidak menambah tools lain dan tidak perlu membuat cluster, juga tidak perlu melakukan monitor terhadap cluster. Terakhir dan yang paling penting, Dataform merupakan service gratis yang tersedia untuk melengkapi fitur BigQuery. Selamat mencoba!

--

--