Impact Housekeeping BigQuery di Warung Pintar

Adam WB
Grow at Warung Pintar
4 min readApr 27, 2021

--

Warung Pintar

Familiar dengan Google BigQuery?

Secara garis besar, Google BigQuery adalah salah satu service cloud yang digunakan oleh Tim Data, Warung Pintar. Google BigQuery sendiri merupakan multi-cloud dan serverless data warehouse yang didesain untuk kebutuhan analisa data.

Sudah setahun lebih Warung Pintar menggunakan service tersebut, di mana kami telah memiliki 2000+ tables dan viewsyang digunakan untuk melakukan analisa. Namun, dari sekian banyak tabel yang ada, tidak semuanya ter-update, bahkan ada pula yang sudah tidak terpakai.

Kali ini, saya akan membagikan pengalaman Tim Data Engineer, Warung Pintar, dalam melakukan housekeeping BigQuery untuk melakukan optimisasi cost service.

AnWar di Warung Pintar.

Membahas optimisasi cost service, hal utama yang perlu diperhatikan adalah pricing. Pricing pada BigQuery meliputi beberapa hal, yaitu,

  • Storage: Active storage, long-term storage, dan streaming inserts.
  • Query processing: On-demand dan flat-rate.

Dari beberapa kategori pricing yang ada, kita berfokus pada long-term storage.

Mengapa demikian?

Hal ini karena kita ingin menghapus beberapa tabel yang memang sudah tidak digunakan, namun tidak memiliki expired tabled date. Tabel di BigQuery tersebut memiliki cost untuk long-term storage dan dapat menjadi active storage jika kita melakukan beberapa perubahan, seperti “streaming, copying, or loading data, including any DML or DDL actions”.

Karenanya, saya mencoba membuat sebuah otomasi untuk melakukan pengecekan apakah tabel tersebut sudah tidak ada update atau modified.

Flow housekeeping

Bagan di atas merupakan alur bagaimana saya melakukan otomasi pengecekan tabel pada BigQuery. Kurang lebihnya begini,

a. Dengan script python, cek apakah tabel pada BigQuery mengalami perubahan. Kita dapat menggunakan informasi dataset.__TABLES__ untuk melihat time_updated.

b. Pilih tabel yang sudah tidak aktif selama 6 bulan lebih. Tabel inilah yang akan dihapus.

c. Saya pribadi menggunakan Airflow untuk melakukan scheduling jobs pada poin a dan b setiap 1 bulan sekali, tepatnya pada tanggal 25.

d. Hasil dari jobs tersebut kemudian di-push ke Google Spreadsheet. Hal ini bertujuan untuk memberi akses kepada Tim Data yang lain untuk melakukan validasi apakah tabel di list tersebut memang sudah tidak dipakai. Jika ada tabel yang masih dipakai, maka cukup dihapus dari list pada Spreadsheet.

e. Tim Data memiliki waktu 7 hari untuk melakukan validasi.

f. Setelah 7 hari, akan muncul Python script job yang meng-extract data dari Spreadsheet untuk kemudian dijadikan task pada DAG Airflow.

g. Task tersebut akan secara otomatis melakukan back-up dan delete tabel BigQuery. Poin yang perlu dicatat adalah tabel tidak dihapus begitu saja, namun di-back-up terlebih dahulu di GCS. Hal ini untuk mengantisipasi jika terjadi sebuah kesalahan dalam validasi ataupun delete action table.

h. Script back-up dapat diunduh pada repository berikut, https://github.com/GoogleCloudPlatform/bigquery-oreilly-book/tree/master/blogs/bigquery_backup. Sedangkan untuk function delete, teman-teman dapat menambahkan sendiri menggunakan bq command pada sub-process tersebut.

i. Job pada poin d dilakukan secara otomatis pada DAG tertentu yang memberi akses untuk membuat list taskberdasarkan list tabel yang akan dihapus sehingga kita tahu status tabel mana saja yang akan diproses, di mana, pada akhirnya, ada 2 DAG yang digunakan.

Lalu, bagaimana dampak cost dari housekeeping ini?

Housekeeping ini telah kita coba implementasikan pada bulan Februari. Melihat perubahan yang ada, berikut hasil analisa terkait cost kategori BigQuery,

Dari data tersebut, terdapat kenaikan yang signifikan di bulan Desember 2020 ke Januari 2021. Kita pun mencoba melakukan housekeeping pada bulan Februari dan ternyata masih terjadi peningkatan cost pada bulan tersebut. Walau demikian, peningkatannya tidak setinggi bulan sebelumnya.

Pertanyaan yang kemudian muncul,

Mengapa masih ada peningkatan nilai untuk long term storage?

Asumsi yang dapat kita diskusikan terkait peningkatan ini adalah adanya tabel yang sudah selama 90 hari tidak aktif, namun masih belum ter-filter, berhubung kita mem-filter dari 6 bulan saat tabel tersebut tidak update. Hal ini juga bisa ditambah dengan asumsi bahwa tabel yang tidak aktif memiliki ukuran yang lebih besar.

Demikian flow housekeeping yang Warung Pintar terapkan. Tentu masih ada beberapa update yang dapat ditingkatkan atau ubah. Secara paralel, kami pun masih akan terus melakukan evaluasi apakah cara tersebut sudah relevan dengan kondisi yang ada agar pengembangannya tepat. 😊

Silakan comment untuk bertanya atau berdiskusi!

Bagi kalian yang tertarik untuk gabung dengan Warung Pintar, terlebih di Tim Product dan Engineering, untuk menggali lebih dalam soal housekeeping di Warung Pintar, yuk, daftarkan dirimu melalui link berikut — https://bit.ly/WPCareer!

--

--