Desain pipeline

Tata letak bergaya medallion, schema, jadwal.

Daftar isi

Desain pipeline adalah keputusan yang menentukan apakah proyek tetap bisa dipelihara setelah pertama kali jalan. Topik ini menyusun tiga keputusan inti, yaitu tata letak lapisan yang bergaya medallion, schema pada tiap lapisan, dan jadwal pemrosesan, semuanya diukur dari keluaran akhir yang sudah dinyatakan pada topik pemilihan proyek.

Tata letak medallion#

Pola medallion membagi data ke tiga lapisan yang tujuannya berbeda. Lapisan bronze menyimpan data mentah apa adanya sebagaimana diterima dari sumber, tanpa pembersihan apa pun, sehingga berfungsi sebagai rekaman yang bisa diputar ulang kapan saja. Lapisan silver menyimpan data yang sudah dibersihkan, disaring, dan diseragamkan tipenya, sehingga satu baris mewakili satu kejadian yang valid. Lapisan gold menyimpan hasil agregasi yang siap dikonsumsi, yaitu bentuk yang benar-benar ditanyakan oleh konsumen.

text
akar-proyek/
├── sumber/
│   └── absen_mentah.csv          (berkas dari sumber)
├── bronze/
│   └── (Parquet apa adanya, satu berkas per penjangkauan sumber)
├── silver/
│   └── (Parquet hasil deduplikasi dan pembersihan)
├── gold/
│   └── (Parquet hasil agregasi per kelas)
└── pipeline.py

Manfaat tata letak ini baru terasa saat masalah datang. Ketika perhitungan keliru, lapisan bronze menyimpan kebenaran mentah sehingga silver bisa dibangun ulang tanpa meminta sumber mengirim ulang. Ketika definisi laporan berubah, hanya lapisan gold yang dihitung ulang dari silver, tanpa menyentuh pembersihan. Setiap lapisan menjadi kontrak antara tahap-tahap yang bisa dikerjakan orang berbeda, dan pada proyek sungguhan ketiganya sering berupa tabel Delta sebagaimana dijelaskan pada modul ekosistem.

Penamaan folder mengikuti konsekuensi logis yang sama, yaitu nama yang menyebut isi dan sumbernya, bukan nama yang bergaya kode. Folder gold/nilai_per_kelas bercerita sendiri, sedangkan folder out_final_v2 menuntut ingatan orang yang membuatnya. Prinsip yang sama berlaku pada berkas pipeline, yaitu satu skrip per pipeline dengan nama yang menyebut aliran datanya.

Schema pada tiap lapisan#

Schema yang dinyatakan eksplisit sejak bronze mencegah kelas masalah yang paling mahal pada pekerjaan data, yaitu tipe yang berubah diam-diam. Pada bronze, schema eksplisit berarti pembacaan tidak menebak tipe dari sampel baris, dan baris yang tidak sesuai tertangkap sejak dini. Pada silver, schema berfungsi sebagai kontrak pembersihan, misalnya kolom nilai bertipe bilangan bulat tanpa kekosongan dan kolom identitas unik per baris, sehingga tahap berikutnya bisa membangun agregasi tanpa mengulang pemeriksaan.

Dua keputusan schema yang paling sering menentukan nasib proyek adalah kunci unik dan pemartisi. Kunci unik menentukan cara deduplikasi pada silver dan cara penggabungan pada gold, dan kunci yang salah akan membuat baris hilang atau ganda secara senyap. Pemartisi pada penulisan menentukan biaya baca tahap berikutnya, dan pada data kecil satu berkas per lapisan sudah benar, sementara pada data besar kolom pemartisi dipilih yang tersebar merata sebagaimana dijelaskan pada modul berkas dan format.

Jadwal dan tingkat otomasi#

Jadwal dipilih dari kebutuhan konsumen, bukan dari keinginan menata ulang infrastruktur. Laporan yang dibaca tiap pagi cukup dengan pemrosesan terjadwal harian, dan trigger availableNow yang diperagakan pada modul streaming cocok untuk pola ini, yaitu menjalankan seluruh data yang tersedia lalu berhenti. Data yang tiba terus dan konsumen yang menuntut keterbaruan dekat waktu nyata membutuhkan kueri streaming yang hidup, dengan checkpoint dan sink yang menjamin ketepatan pengiriman.

Antara keduanya ada pola yang paling sering dipakai pada proyek awal, yaitu pipeline batch yang dipicu kehadiran berkas baru. Pola ini memakai trigger availableNow pada jadwal rutin, sehingga tidak ada proses yang hidup terus, sementara tetap tahan terhadap data yang datang terlambat karena batch berikutnya memproses apa pun yang tertinggal. Pada tingkat mana pun, retry dan pemantauan berupa event log dari modul produksi tetap relevan, karena kegagalan bukan kemungkinan yang bisa dihindari melainkan keadaan yang harus ditangani.

Kesalahan umum#

Kesalahan pertama adalah menulis langsung ke lapisan akhir tanpa lapisan mentah dan bersih. Perbaikan definisi laporan memaksa membaca ulang sumber yang mungkin sudah tidak tersedia, dan pembersihan yang salah tidak pernah bisa diulang. Ketiga lapisan menambah biaya tulis yang kecil dan membeli kemampuan bangun ulang yang mahal harganya.

Kesalahan kedua adalah menebak tipe di lapisan mentah dengan membaca CSV tanpa schema. Tipe yang salah baru ketahuan setelah agregasi menghasilkan angka yang aneh, dan pencarian mundur ke sumbernya mahal. Menyatakan schema pada pembacaan pertama adalah kebiasaan yang berbiaya satu baris dan menghemat satu malam.

Kesalahan ketiga adalah memilih jadwal lebih rapat daripada yang diperlukan konsumen. Pipeline tiap lima menit untuk laporan harian menambah biaya menjalankan dan menelusuri kegagalan tanpa memberi nilai tambah, dan jadwal yang lebih longgar memberi ruang perbaikan yang tenang. Jadwal harus mengikuti kebutuhan keluaran, dan berubah bersamanya.

Ringkasan#

  • Pola medallion memisahkan mentah, bersih, dan agregat, sehingga setiap perubahan definisi hanya menghitung ulang lapisan yang terdampak.
  • Schema eksplisit sejak bronze mencegah tipe berubah diam-diam, dan kunci unik serta pemartisi adalah dua keputusan schema yang menentukan nasib deduplikasi dan biaya baca.
  • Jadwal mengikuti kebutuhan konsumen, dari batch terjadwal, batch yang dipicu berkas, sampai streaming yang hidup, dengan trigger availableNow sebagai pola tengah yang paling praktis.
  • Penamaan folder dan berkas yang menyebut isi membuat pipeline tetap terbaca oleh orang lain, termasuk diri sendiri beberapa bulan kemudian.

Referensi#