Mengolah Data OpenSky Menjadi Ringkasan Aktivitas Pesawat dengan Python
Dalam final project Bootcamp Data Engineer With Python, peserta mengembangkan pipeline ELT untuk mengambil data pesawat dari OpenSky, menyimpannya di ClickHouse, lalu mengolahnya menjadi ringkasan analitis menggunakan dbt. Apache Airflow mengatur urutan pekerjaan dengan jadwal setiap jam.
Sebagai penyelenggara, kami melihat proyek ini sebagai penerapan materi data engineering pada alur yang konkret: menghubungkan API, memetakan respons ke struktur tabel, menyaring data, dan menyusun metrik yang dapat diinterpretasikan.
Studi Kasus: Pengolahan Data Status Pesawat
Proyek menggunakan data status pesawat dari API OpenSky. Informasi yang diambil mencakup identitas transponder, callsign, negara pada atribut origin_country, koordinat, ketinggian, kecepatan, arah gerak, serta status pesawat di darat atau di udara.
Data tersebut merupakan observasi kondisi pesawat pada waktu tertentu. Agar dapat digunakan untuk analisis, respons API perlu dipetakan ke kolom database dan diperiksa kelengkapannya.
Peserta menyusun proses untuk mengubah data mentah tersebut menjadi ringkasan berdasarkan negara, termasuk jumlah observasi, proporsi observasi pesawat di udara, rata-rata kecepatan, dan rata-rata ketinggian.
Apa yang Dikerjakan Peserta?
Peserta mengembangkan beberapa komponen yang saling terhubung:
- Skrip Python untuk mengambil data dari API OpenSky.
- Pemetaan respons API ke struktur tabel
raw_flights. - Penyimpanan data ke ClickHouse.
- DAG Airflow untuk menjalankan ekstraksi, pemuatan, dan transformasi secara berurutan.
- Model dbt untuk menyaring data dan membuat agregasi.
- Definisi pemeriksaan nilai kosong pada kolom tertentu.
- Konfigurasi lingkungan berbasis Docker.
Alur ini menggunakan pendekatan Extract, Load, Transform. Data diambil dari sumber, dimuat ke database, kemudian ditransformasikan melalui model SQL.
Teknologi dan Tools yang Digunakan
Python digunakan untuk ekstraksi dan pemetaan data. Library Requests menangani komunikasi HTTP, sedangkan clickhouse-connect menghubungkan skrip dengan ClickHouse.
Apache Airflow mengatur dependensi pekerjaan. DAG disusun dengan tiga task utama: extract, load, dan run_dbt. Transformasi dijalankan setelah proses pemuatan selesai.
ClickHouse menjadi penyimpanan data observasi. Tabel mentah menggunakan mesin MergeTree, partisi bulanan berdasarkan waktu kejadian, serta pengurutan berdasarkan waktu dan identitas transponder.
dbt digunakan untuk mendefinisikan transformasi SQL, hubungan antarmodel, dan pemeriksaan data. Model pada proyek dikonfigurasi sebagai view, sehingga lapisan transformasi merepresentasikan query terhadap data sumber.
Docker digunakan untuk menyusun lingkungan layanan, termasuk image Airflow dengan dependensi penghubung ClickHouse dan dbt.
Dari Data Mentah ke Ringkasan Analitis
Pada tahap pemuatan, peserta mengubah timestamp menjadi nilai waktu, merapikan callsign, dan mengonversi status di darat menjadi nilai numerik. Data tanpa timestamp yang diperlukan dilewati sebelum dimasukkan ke tabel mentah.
Lapisan silver menyaring observasi yang memiliki nilai kosong pada koordinat, ketinggian, kecepatan, arah, dan laju vertikal. Penyaringan ini menyediakan data dengan atribut yang lebih lengkap untuk tahap agregasi.
Lapisan gold kemudian mengelompokkan data berdasarkan origin_country. Metrik yang dihitung meliputi jumlah observasi, jumlah observasi di udara dan di darat, persentase di udara, rata-rata kecepatan dalam kilometer per jam, serta rata-rata ketinggian barometrik.
Pemisahan tersebut membantu memperjelas tanggung jawab setiap lapisan: penyimpanan sumber, penyaringan, dan penyajian ringkasan.
Penjadwalan dan Penanganan Gangguan
DAG Airflow dikonfigurasi berjalan setiap jam dengan catchup=False, sehingga tidak otomatis mengejar seluruh jadwal historis yang terlewat.
Pada ekstraksi, kode menggunakan timeout dan mekanisme retry untuk beberapa respons seperti pembatasan permintaan dan gangguan server. Bagian ini memperkenalkan peserta pada kebutuhan menangani kegagalan sementara ketika pipeline bergantung pada layanan eksternal.
Pemanggilan dbt juga memeriksa kode keluar proses. Jika transformasi gagal, task meneruskan kegagalan tersebut agar tidak tercatat sebagai pekerjaan yang berhasil.
Insight: Memahami Makna Metrik dan Kelengkapan Data
Salah satu insight penting dari proyek ini adalah membedakan jumlah observasi dengan jumlah penerbangan unik. Metrik bernama total_flights menggunakan perhitungan jumlah baris. Karena pengambilan dilakukan berkala, pesawat yang sama dapat tercatat beberapa kali. Hasilnya perlu dibaca sebagai jumlah observasi yang tersimpan.
Agregasi berdasarkan origin_country juga tidak secara langsung menunjukkan negara keberangkatan atau tujuan perjalanan. Ringkasan mengikuti atribut negara yang tersedia pada sumber.
Penyaringan nilai kosong turut memengaruhi hasil analisis. Observasi yang atributnya tidak lengkap dikeluarkan dari lapisan silver, sehingga persentase di udara dan rata-rata yang dihitung hanya mewakili data yang lolos penyaringan. Hal ini menjadi pelajaran tentang hubungan antara aturan kualitas data dan interpretasi metrik.
Manfaat Pembelajaran dan Pengembangan Berikutnya
Proyek ini memberi peserta pengalaman menghubungkan API, database, orkestrasi, dan transformasi SQL dalam satu alur. Pemisahan task juga membantu menentukan tahap yang perlu diperiksa ketika terjadi gangguan.
Definisi pengujian not_null sudah tersedia pada beberapa kolom model. Namun, DAG yang diperiksa menjalankan dbt run, sehingga pemeriksaan tersebut perlu dijalankan melalui langkah pengujian tersendiri atau perintah yang mencakup pengujian.
Pengembangan berikutnya dapat mencakup pencegahan pencatatan ulang observasi yang sama dan penambahan batas waktu pada ringkasan. Bagi kami sebagai penyelenggara, proyek ini menyediakan dasar praktik untuk memahami bahwa pipeline yang berguna membutuhkan proses yang teratur, kualitas data yang diperiksa, dan definisi metrik yang jelas.