Persiapkan wawancara data engineer dengan pertanyaan seputar SQL, pemodelan data, pipeline ETL, sistem batch dan streaming, Spark, orkestrasi, data warehouse, kualitas data, dan system design.
Wawancara data engineer menguji apakah Anda mampu membangun sistem data yang andal: menyerap data mentah, memodelkannya dengan jelas, mentransformasikannya secara efisien, menjaga kualitasnya, mengorkestrasi pipeline, dan menyediakan data bagi analis, data scientist, tim produk, serta tim bisnis.
4-6
Tahap wawancara pada umumnya
45-75 menit
Durasi sesi teknis
6+
Area keterampilan inti DE
5-8 minggu
Waktu persiapan yang disarankan
Yang dinilai pewawancara data engineer
•
Kedalaman SQL: mampukah Anda menulis query yang akurat dan berperforma baik untuk join, window function, deduplikasi, dan logika inkremental?
•
Pemodelan data: mampukah Anda merancang tabel, skema, grain, partisi, dan slowly changing dimension untuk kasus nyata?
•
Desain pipeline: mampukah Anda membangun alur kerja batch dan streaming yang andal, mudah dipantau, dan bisa dipulihkan?
•
Nalar sistem terdistribusi: mampukah Anda menalar persoalan Spark, partisi, shuffle, state, latensi, dan throughput?
•
Kualitas data: mampukah Anda mencegah data buruk diam-diam masuk ke dashboard, model, dan fitur produksi?
•
Pola pikir platform: mampukah Anda menyeimbangkan biaya, performa, kesegaran data, tata kelola, lineage, dan pengalaman developer?
•
Tanggung jawab atas sistem produksi: mampukah Anda men-debug insiden, melakukan backfill dengan aman, mengelola perubahan skema, dan mengomunikasikan dampaknya?
Data engineering adalah rekayasa keandalan untuk data
Data engineer yang kuat tidak sekadar memindahkan data dari A ke B. Mereka memastikan data tepercaya, mudah dipahami, mudah ditemukan, skalabel, dan bisa dipulihkan saat terjadi masalah.
Proses Wawancara Data Engineer
Rangkaian wawancara data engineering biasanya mencakup SQL, Python atau coding, pemodelan data, desain pipeline, system design, Spark atau pemrosesan terdistribusi, debugging, dan wawancara behavioral.
Tahapan umum wawancara data engineer
1
Screening rekruter: memastikan kecocokan dengan posisi, tech stack, kompensasi, lokasi, dan pengalaman di domain terkait.
2
Screening manajer perekrutan: membahas tanggung jawab atas pipeline, pengalaman pemodelan data, insiden produksi, dan kolaborasi dengan tim analitik atau produk.
3
Sesi SQL: menguji join, window function, deduplikasi, transformasi inkremental, query bergaya analisis kohort, dan kepekaan terhadap performa.
4
Sesi coding: umumnya berfokus pada Python, menguji struktur data, pemrosesan file, API, parsing, atau transformasi bergaya pipeline.
5
Sesi pemodelan data: Anda diminta merancang tabel warehouse, skema event, model fakta/dimensi, atau tata letak lakehouse.
6
Sesi system design: Anda diminta merancang sistem ingestion, ETL/ELT, streaming, orkestrasi, monitoring, lineage, dan kualitas data.
7
Sesi behavioral: menilai rasa kepemilikan, penanganan insiden, komunikasi dengan stakeholder, cara menghadapi ambiguitas, dan penyelesaian pekerjaan lintas fungsi.
Analytics Data Engineer
Platform / Streaming Data Engineer
Fokus utama
Pemodelan warehouse, transformasi dbt/SQL, kualitas data pelaporan, metrik bisnis
System design, Spark/Flink/Kafka, state, partisi, scaling, insiden operasional
Sinyal kuat
Membangun model tepercaya yang bisa digunakan analis dan tim bisnis dengan yakin
Merancang sistem tangguh yang mampu menangani volume tinggi, latensi rendah, dan kegagalan
Kesalahan umum
Memodelkan tabel tanpa grain, kepemilikan, atau definisi metrik yang jelas
Merancang arsitektur streaming tanpa mempertimbangkan exactly-once, replay, state, atau monitoring
Pahami posisi data engineering yang Anda incar
Wawancara analytics engineer yang berfokus pada warehouse berbeda dengan wawancara data engineer untuk platform streaming. Sesuaikan persiapan dengan tech stack dan tanggung jawab yang tercantum di deskripsi pekerjaan.
Pertanyaan SQL dan Transformasi Data
Pertanyaan SQL untuk data engineer biasanya berfokus pada ketepatan hasil dan kesiapan produksi: grain, deduplikasi, logika inkremental, window function, partisi, dan performa.
Kerangka: Window function dengan pengurutan deterministik
Gunakan window function untuk memberi nomor baris di setiap partisi event_id. Urutkan secara descending berdasarkan kolom kesegaran data yang paling andal, misalnya ingestion_timestamp atau updated_at. Jika ada kemungkinan nilai yang sama, tambahkan tie-breaker yang deterministik seperti source_sequence_number atau raw_file_name.
Pola query-nya: pilih semua baris, hitung row_number() over(partition by event_id order by ingestion_timestamp desc, source_sequence_number desc), lalu filter baris dengan row_number = 1.
Detail yang paling penting dalam wawancara adalah determinisme. Jika dua record memiliki timestamp yang sama tanpa tie-breaker, hasilnya bisa berbeda setiap kali query dijalankan. Pastikan juga apakah yang dimaksud event terbaru adalah waktu ingestion terbaru, waktu event terbaru, atau waktu update terbaru di sistem sumber.
Untuk produksi, saya akan memantau tingkat duplikasi, event yang datang terlambat, jumlah event_id yang null, dan apakah deduplikasi mengubah metrik downstream secara tak terduga.
Kemungkinan pertanyaan lanjutan
Bagaimana jika event_id tidak ada?
Bagaimana Anda menangani koreksi yang datang terlambat?
Apa yang berubah jika pemrosesannya inkremental?
Kerangka: Filter event aktif -> normalisasi tanggal -> group by tanggal dan pengguna
Pertama, definisikan pengguna aktif. Biasanya tidak semua event layak dihitung. Page view, event dari bot, background refresh, dan pengguna internal mungkin perlu dikecualikan. Pilih event yang bermakna seperti session_start, purchase, message_sent, atau feature_used, tergantung produknya.
Buat transformasi yang memfilter event yang memenuhi syarat, mengonversi timestamp event ke zona waktu bisnis, melakukan group by activity_date dan user_id, lalu menghasilkan satu baris per pengguna aktif per hari. Jika tabel akhirnya berupa agregat, hitung jumlah pengguna unik per hari. Jika tabelnya berupa serving model, simpan date, user_id, platform, country, dan first_active_timestamp.
Detail produksi yang penting meliputi zona waktu, event yang datang terlambat, pemfilteran bot/test, pengguna yang dihapus, event duplikat, dan partisi berdasarkan activity_date. Untuk build inkremental, proses ulang partisi beberapa hari terakhir untuk menangkap event yang terlambat, bukan hanya hari ini.
Jawaban yang kuat juga mencakup validasi: bandingkan DAU dengan jumlah event di sumber, pantau perubahan dari hari ke hari, dan periksa konsistensi di tingkat segmen.
Kemungkinan pertanyaan lanjutan
Event apa saja yang layak dihitung sebagai aktif?
Bagaimana Anda menangani event yang terlambat?
Sebaiknya DAU dibuat sebagai tabel atau query metrik?
Kerangka: Cakupan masalah -> query plan -> pertumbuhan data -> join -> partisi -> perubahan terbaru
Pertama, periksa apakah masalahnya khusus pada query tersebut, terjadi di seluruh warehouse, atau terkait infrastruktur. Jika banyak query melambat, penyebabnya bisa kapasitas cluster, beban warehouse, atau penurunan kinerja layanan. Jika hanya satu query yang melambat, periksa query dan datanya.
Telusuri perubahan terbaru: pertumbuhan ukuran tabel, perubahan skema, join baru, filter yang berubah, partition pruning yang tidak berjalan, statistik yang usang, data skew, join yang membuat jumlah baris meledak, atau tambahan operasi distinct/order by. Tinjau query plan jika tersedia.
Penyebab umum antara lain join pada grain yang salah, tidak ada filter tanggal, join many-to-many, pemindaian seluruh partisi, window function yang tidak efisien, shuffle besar, atau penggunaan fungsi pada kolom partisi yang menghalangi pruning.
Perbaikannya bisa berupa memfilter lebih awal, melakukan pra-agregasi, menambahkan filter partisi, clustering/sorting, mematerialisasi model perantara, memperbarui statistik, mengurangi kolom yang dipilih, atau membetulkan logika join. Saya juga akan menambahkan monitoring untuk runtime, bytes scanned, jumlah baris, dan biaya.
Kemungkinan pertanyaan lanjutan
Apa itu partition pruning?
Bagaimana join bisa membuat jumlah baris meledak?
Bagaimana Anda mencegah regresi ini terulang?
Pertanyaan Pemodelan Data dan Data Warehouse
Wawancara pemodelan data menguji apakah Anda mampu merancang skema yang jelas, skalabel, hemat biaya, dan berguna untuk analitik, machine learning, serta pelaporan operasional.
Konsep pemodelan data yang perlu dikuasai
Tabel fakta (fact table)
Tabel berisi event atau transaksi bisnis yang dapat diukur, seperti pesanan, pembayaran, sesi, atau pengiriman.
Tabel dimensi (dimension table)
Tabel berisi konteks deskriptif untuk fakta, seperti pelanggan, produk, toko, kampanye, atau tanggal.
Grain
Tingkat detail yang diwakili oleh setiap baris. Grain wajib ditetapkan sebelum membangun fakta, dimensi, metrik, atau join.
Slowly changing dimension (SCD)
Desain dimensi yang melacak perubahan atribut dari waktu ke waktu, seperti segmen pelanggan, alamat, atau pemilik akun.
Mulailah dari proses bisnis inti: browsing, keranjang, pesanan, pembayaran, pengiriman, retur, refund, inventaris, dan atribusi pemasaran. Setiap proses bisa menjadi tabel fakta atau model event, tergantung penggunaannya.
Tabel fakta yang penting meliputi fact_orders dengan satu baris per pesanan, fact_order_items dengan satu baris per produk per pesanan, fact_payments, fact_refunds, fact_shipments, dan fact_inventory_snapshot. Dimensinya meliputi dim_customer, dim_product, dim_date, dim_store (atau gudang), dim_channel, dan dim_campaign.
Tetapkan grain secara eksplisit. Pendapatan per kategori produk biasanya harus diambil dari grain item pesanan, bukan grain pesanan. Metrik siklus hidup pelanggan bisa menggunakan grain pelanggan atau langganan. Analisis inventaris mungkin membutuhkan grain snapshot harian.
Hal yang perlu dipertimbangkan dalam pemodelan: atribut pelanggan atau produk yang berubah perlahan, refund dan pembatalan, diskon di tingkat pesanan versus item, mata uang, pajak, ongkos kirim, guest checkout, dan data yang datang terlambat. Saya akan menetapkan metrik yang menjadi acuan resmi (source of truth) dan membangun semantic model atau data mart untuk tim keuangan, pemasaran, produk, dan operasional.
Validasinya mencakup rekonsiliasi pendapatan dengan data keuangan, jumlah pesanan dengan sistem transaksional, total refund dengan data pembayaran, dan inventaris dengan sistem gudang.
Kemungkinan pertanyaan lanjutan
Apa grain dari fact_order_items?
Bagaimana Anda memodelkan refund?
Bagaimana Anda menangani perubahan kategori produk dari waktu ke waktu?
Kerangka: Type 1 versus Type 2 sesuai kebutuhan histori
Pendekatan yang tepat bergantung pada seberapa penting akurasi historis. Type 1 menimpa nilai lama; caranya sederhana dan berguna jika yang penting hanya nilai terbaru. Type 2 mempertahankan histori dengan membuat baris dimensi baru setiap kali atribut berubah, biasanya dengan effective_start_date, effective_end_date, current_flag, dan surrogate key.
Contoh: jika wilayah pelanggan berubah dari Barat ke Timur, Type 1 akan memperbarui baris pelanggan tersebut menjadi Timur. Akibatnya, laporan pendapatan historis akan menampilkan pendapatan lama di bawah Timur, padahal itu bisa keliru. Type 2 mempertahankan baris Barat yang lama dan membuat baris Timur yang baru, sehingga fakta dapat di-join ke versi yang benar pada saat event terjadi.
Type 2 menambah kompleksitas: surrogate key, join berdasarkan rentang tanggal, fakta yang datang terlambat, pelaporan kondisi terkini versus historis, dan tabel dimensi yang lebih besar. Gunakan Type 2 jika laporan harus mencerminkan atribut sebagaimana adanya saat event terjadi.
Jawaban yang kuat menjelaskan kebutuhan bisnisnya terlebih dahulu sebelum memilih tipe SCD.
Kemungkinan pertanyaan lanjutan
Kapan Type 1 bisa diterima?
Bagaimana fakta di-join ke dimensi Type 2?
Apa yang terjadi dengan fakta yang datang terlambat?
Kerangka: Tata kelola dan fleksibilitas versus kesederhanaan query dan performa
Star schema memisahkan fakta dan dimensi. Pendekatan ini berguna jika Anda membutuhkan dimensi yang bisa dipakai ulang, metrik yang konsisten, tata kelola, grain yang jelas, dan analisis yang fleksibel. Star schema mengurangi duplikasi dan membuat perubahan pada dimensi lebih mudah dikelola.
Tabel lebar yang didenormalisasi bisa berguna untuk kebutuhan analitik tertentu yang sering diakses, fitur machine learning, atau dashboard yang mengutamakan kesederhanaan query dan performa. Tabel ini mengurangi kerumitan join bagi pengguna data, tetapi bisa menduplikasi data dan menimbulkan risiko tata kelola jika banyak tabel lebar mendefinisikan metrik secara berbeda-beda.
Dalam praktiknya, saya sering memelihara tabel fakta dan dimensi kanonis yang bersih, lalu menerbitkan data mart terkurasi atau tabel lebar untuk kasus penggunaan tertentu. Fondasi warehouse harus tetap tepercaya, sementara model downstream dioptimalkan sesuai kebutuhan pengguna.
Keputusannya bergantung pada skala, siapa pengguna datanya, perilaku tool BI, biaya, latensi, dan seberapa sering definisi bisnis berubah.
Kemungkinan pertanyaan lanjutan
Mana yang lebih baik untuk dashboard BI?
Bagaimana Anda menghindari inkonsistensi metrik?
Apa itu semantic layer?
Desain dan Orkestrasi Pipeline
Wawancara pipeline menguji apakah Anda mampu merancang alur kerja yang idempoten, mudah dipantau, bisa dipulihkan, serta sesuai dengan kebutuhan kesegaran data dan biaya.
Alur desain pipeline yang andal
1
Perjelas sistem sumber, volume data, kebutuhan kesegaran data, konsumen downstream, dan toleransi terhadap kegagalan.
2
Pilih pola ingestion: batch extract, CDC (change data capture), event stream, API pull, file drop, atau managed connector.
3
Tentukan landing zone, penyimpanan data mentah, penanganan skema, dan strategi replay.
4
Transformasikan data melalui lapisan yang jelas: raw, cleaned/staged, modeled, dan serving mart.
5
Buat pipeline idempoten agar eksekusi ulang tidak menduplikasi atau merusak data.
6
Tambahkan pemeriksaan kualitas data, lineage, logging, alert, metrik, dan informasi pemilik.
7
Rencanakan backfill, evolusi skema, data terlambat, retry, kegagalan parsial, dan pengendalian biaya.
Perjelas kebutuhannya terlebih dahulu: kesegaran data, volume pesanan, jeda yang dapat diterima, batasan beban pada database sumber, konsumen downstream, dan apakah ada koreksi data historis.
Desain sederhananya: ekstrak pesanan secara inkremental menggunakan updated_at atau CDC, simpan data mentah di object storage atau tabel raw di warehouse, transformasikan ke tabel staging, lalu publikasikan tabel fakta hasil pemodelan seperti fact_orders dan fact_order_items. Orkestrasikan dengan Airflow, Dagster, dbt Cloud, atau tool workflow terkelola.
Pipeline harus idempoten. Jika dijalankan ulang untuk suatu tanggal atau batch, pipeline harus mengganti atau menggabungkan (merge) data secara deterministik, bukan menambahkan duplikat. Gunakan watermark dengan hati-hati, dan proses ulang jendela lookback untuk menangkap update yang terlambat.
Pemeriksaan validasi: jumlah baris, primary key yang null, order ID duplikat, total pendapatan, distribusi status, kesegaran data, dan rekonsiliasi dengan sumber. Monitoring harus memicu alert saat terjadi kegagalan, perubahan volume yang tidak wajar, tingkat duplikasi tinggi, atau data yang tertunda. Dokumentasikan kepemilikan dan dependensi downstream.
Kemungkinan pertanyaan lanjutan
Mengapa updated_at tidak selalu cukup?
Bagaimana Anda menghindari pemuatan pesanan duplikat?
Bagaimana Anda melakukan backfill histori dua tahun?
Kerangka: Input sama dan eksekusi ulang menghasilkan output yang sama
Pipeline yang idempoten dapat dijalankan berkali-kali dengan input yang sama dan tetap menghasilkan output benar yang sama, tanpa duplikat atau efek samping yang tidak diinginkan. Ini penting karena pipeline bisa gagal, dijalankan ulang, dan memerlukan backfill.
Contoh: pipeline yang tidak idempoten menambahkan (append) pesanan kemarin setiap kali berjalan. Jika pipeline di-retry setelah gagal, pendapatan menjadi dua kali lipat. Versi yang idempoten akan menghapus lalu mengganti partisi target, melakukan merge berdasarkan primary key, atau menulis ke tabel sementara lalu menukarnya secara atomik (atomic swap).
Idempotensi membutuhkan key yang jelas, strategi partisi, transformasi yang deterministik, dan penanganan efek samping yang cermat. Ini salah satu konsep terpenting dalam data engineering di lingkungan produksi karena kemampuan pemulihan bergantung padanya.
Kemungkinan pertanyaan lanjutan
Bagaimana membuat pipeline append-only menjadi idempoten?
Pertama, deteksi perubahan skema secara otomatis melalui schema registry, pemeriksaan metadata, contract test, atau validasi saat ingestion. Lalu klasifikasikan perubahannya: penambahan kolom, kolom yang dihapus, kolom yang diganti namanya, perubahan tipe data, perubahan nullability, atau perubahan makna (semantik).
Penambahan kolom yang nullable biasanya aman. Kolom yang dihapus, field yang diganti namanya, dan perubahan tipe data bisa merusak transformasi dan dashboard downstream. Perubahan semantik sangat berbahaya karena skemanya tampak valid padahal maknanya berubah.
Lindungi pipeline dengan menyimpan data mentah, pemeriksaan kompatibilitas, alert, dan kontrak untuk sumber data yang krusial. Untuk breaking change, koordinasikan dengan pemilik sumber, perbarui transformasi, lakukan backfill jika perlu, dan komunikasikan dampaknya ke downstream.
Jawaban yang matang mencakup data contract, versioning, lineage, pengujian, dan kepemilikan yang jelas sehingga perubahan skema tidak diam-diam merusak analitik.
Kemungkinan pertanyaan lanjutan
Apa itu data contract?
Bagaimana Anda menangani perubahan tipe kolom?
Bagaimana jika tim sumber tidak memberi peringatan?
Sistem Batch dan Streaming
Pertanyaan batch dan streaming menguji pemahaman Anda tentang latensi, throughput, urutan data, state, windowing, replay, serta trade-off operasional antara arsitektur yang lebih sederhana dan yang lebih real-time.
Pemrosesan Batch
Pemrosesan Streaming
Paling cocok untuk
Pelaporan berkala, backfill historis, transformasi berskala besar, analitik yang hemat biaya
Fitur real-time, alert, deteksi fraud, dashboard live, keputusan berlatensi rendah
Trade-off utama
Latensi lebih tinggi, tetapi operasional lebih sederhana dan replay lebih mudah
Latensi lebih rendah, tetapi lebih rumit dalam hal state, urutan data, dan penanganan kegagalan
Data terlambat, pemuatan parsial, runtime panjang, biaya backfill
Duplikat, event yang tidak berurutan, checkpointing, pertumbuhan state, semantik exactly-once
Kerangka: Latensi keputusan versus kompleksitas
Pilih streaming jika latensi rendah benar-benar memberikan nilai. Contohnya deteksi fraud, alert operasional, personalisasi real-time, pembaruan inventaris, metrik eksperimen live, dan fitur produk yang dipakai langsung oleh pengguna dan membutuhkan event terkini.
Batch sering kali lebih baik untuk pelaporan harian, analitik historis, rekonsiliasi keuangan, dan transformasi yang masih bisa menerima latensi beberapa jam. Batch lebih mudah dioperasikan, lebih mudah di-replay, dan sering kali lebih murah.
Keputusannya perlu mempertimbangkan kebutuhan kesegaran data, volume event, kebutuhan urutan data, pemrosesan stateful, toleransi kesalahan, keahlian tim, biaya, dan konsumen downstream. Streaming tidak otomatis lebih baik. Streaming menambah kompleksitas terkait duplikat, event terlambat, checkpoint, evolusi skema, dan monitoring.
Jawaban yang kuat menyatakan: gunakan arsitektur paling sederhana yang memenuhi kebutuhan bisnis. Jika bisnis hanya butuh metrik harian, jangan membangun sistem streaming demi gengsi.
Kemungkinan pertanyaan lanjutan
Apa yang dimaksud event terlambat (late event)?
Bagaimana Anda menangani duplikat dalam streaming?
Mulailah dari kebutuhannya: volume event, target latensi, jenis keputusan fraud, toleransi terhadap false positive, dan apakah keputusan tersebut memblokir transaksi atau memicu peninjauan.
Salah satu desain yang mungkin: event pembayaran dipublikasikan ke Kafka atau Kinesis. Stream processor mengonsumsi event, memvalidasi skema, melakukan deduplikasi berdasarkan event_id, memperkaya data dengan fitur pengguna, perangkat, merchant, dan velocity historis, lalu menerapkan aturan atau model. Event berisiko tinggi memicu decision service, antrean peninjauan manual, atau autentikasi tambahan (step-up authentication). Event mentah dan keputusannya ditulis ke penyimpanan yang tahan lama untuk audit dan pelatihan model.
Hal-hal teknis yang krusial: event duplikat, event yang tidak berurutan, kesegaran fitur, ukuran state store, pemrosesan exactly-once atau effectively-once, backpressure, dead-letter queue, replay, monitoring latensi, dan versioning model/aturan.
Kualitas data dan tata kelola penting karena keputusan fraud berdampak pada pelanggan. Catat reason code, pantau tingkat false positive, dan sediakan mekanisme rollback jika aturan atau model berperilaku tidak semestinya.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda menghitung fitur velocity?
Bagaimana Anda melakukan replay event dengan aman?
Apa fungsi dead-letter queue?
Pertanyaan Spark dan Pemrosesan Terdistribusi
Pertanyaan Spark dan pemrosesan terdistribusi menguji pemahaman Anda tentang partisi, shuffle, skew, caching, join, format file, serta penyebab job gagal atau menjadi mahal.
Kerangka: Redistribusi data antarpartisi
Shuffle terjadi saat Spark perlu mendistribusikan ulang data antarpartisi, biasanya untuk operasi seperti groupBy, join, distinct, orderBy, dan repartition. Prosesnya mahal karena data harus berpindah melalui jaringan, diserialisasi/dideserialisasi, ditulis ke disk, dan dikoordinasikan di antara executor.
Shuffle sering kali mendominasi runtime job dan dapat menyebabkan kegagalan saat data mengalami skew atau data perantara terlalu besar. Satu hot key saja bisa mengirim terlalu banyak data ke satu partisi sehingga memunculkan straggler atau error out-of-memory.
Cara menekan biaya shuffle antara lain memfilter lebih awal, hanya memilih kolom yang dibutuhkan, melakukan pra-agregasi, menggunakan broadcast join untuk tabel kecil, mempartisi berdasarkan join key, melakukan salting pada key yang skewed, menghindari distinct/orderBy yang tidak perlu, dan menyetel jumlah partisi.
Jawaban yang kuat mengaitkan konsep ini dengan debugging praktis: periksa Spark UI, stage, shuffle read/write, skew, spill, durasi task, dan memori executor.
Kemungkinan pertanyaan lanjutan
Apa penyebab data skew?
Kapan Anda menggunakan broadcast join?
Bagaimana Anda men-debug job Spark yang lambat?
Kerangka: Identifikasi stage -> kurangi data -> atasi skew -> setel partisi -> hindari operasi berisiko
Pertama, identifikasi titik kegagalannya melalui Spark UI atau log: di stage, operasi, partisi, dan executor mana. OOM bisa disebabkan oleh skew, join besar, operasi collect, partisi yang terlalu besar, UDF yang tidak efisien, atau caching data yang terlalu banyak.
Lalu kurangi data sejak awal: filter baris, pilih hanya kolom yang diperlukan, lakukan predicate pushdown, dan hindari membaca partisi yang tidak perlu. Periksa join: jika salah satu tabel kecil, gunakan broadcast join. Jika ada key yang skewed, gunakan salting atau pisahkan key yang berat. Jika partisi terlalu besar, tambah jumlah partisi; jika terlalu banyak partisi kecil, lakukan coalesce secukupnya.
Hindari collect() pada data besar, hindari Python UDF jika fungsi native bisa digunakan, dan lakukan cache hanya jika data dipakai ulang dan memori mencukupi. Untuk output file, hindari terlalu banyak file kecil dan pilih format kolumnar seperti Parquet dengan kompresi.
Jika sumber daya perlu disetel, sesuaikan memori executor, jumlah core, shuffle partitions, dan memory overhead, tetapi jangan hanya mengandalkan cluster yang lebih besar. Memperbaiki bentuk data dan query plan biasanya memberi hasil yang lebih tahan lama.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda mendeteksi skew?
Mengapa terlalu banyak partisi bisa berdampak buruk?
Parquet adalah format file kolumnar yang efisien untuk analitik karena query sering kali hanya membaca sebagian kolom. Parquet mendukung kompresi, menyandikan tipe data, menyimpan skema, dan memungkinkan predicate pushdown serta column pruning di banyak engine.
CSV adalah teks biasa berbasis baris. Formatnya mudah dibaca manusia dan portabel, tetapi tidak memiliki tipe data yang tegas, ukurannya bisa lebih besar, lebih lambat dipindai, lebih rawan error terkait delimiter/escaping, dan tidak dapat melewati kolom yang tidak relevan secara efisien.
Untuk data lake dan warehouse, Parquet biasanya menekan biaya penyimpanan dan meningkatkan performa query. CSV masih berguna untuk ekspor sederhana, file kecil, atau interoperabilitas, tetapi kurang ideal sebagai format penyimpanan utama untuk analitik.
Kemungkinan pertanyaan lanjutan
Apa itu predicate pushdown?
Kapan CSV masih bisa diterima?
Bagaimana file kecil memengaruhi performa query?
Kualitas Data dan Observability
Pertanyaan kualitas data menguji apakah Anda mampu menangkap data buruk sebelum merusak dashboard, model, fitur produk, laporan keuangan, atau sistem yang langsung digunakan pelanggan.
Untuk pipeline pendapatan, saya akan menambahkan pemeriksaan kesegaran data, jumlah baris, primary key yang null, ID transaksi duplikat, status yang valid, mata uang yang valid, nominal yang tidak negatif jika relevan, rentang tanggal yang dapat diterima, dan integritas referensial antara pesanan, pembayaran, refund, dan pelanggan.
Saya juga akan menambahkan pemeriksaan rekonsiliasi: total pendapatan dibandingkan dengan sistem pembayaran sumber, laporan keuangan, atau versi pipeline sebelumnya. Pantau perubahan dari hari ke hari dan dari minggu ke minggu dengan ambang batas, tetapi perhitungkan pola musiman dan peristiwa yang sudah diketahui.
Aturan bisnis juga penting: pesanan yang dibatalkan tidak boleh dihitung sebagai pendapatan, refund harus mengurangi pendapatan bersih, transaksi uji coba harus dikecualikan, dan konversi mata uang harus menggunakan kurs yang tepat.
Alert harus bisa ditindaklanjuti, diarahkan ke pemiliknya, dan menyertakan konteks: pemeriksaan yang gagal, tabel yang terdampak, tingkat keparahan, dependensi downstream, dan runbook yang disarankan. Alert yang terlalu banyak dan berisik pada akhirnya akan diabaikan.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda menentukan ambang batas alert?
Bagaimana jika pemeriksaan gagal saat tutup buku akhir bulan?
Bagaimana Anda mencegah pendapatan terhitung ganda?
Kerangka: Nilai dampak -> bandingkan versi -> telusuri lineage -> mitigasi -> akar masalah
Pertama, nilai dampaknya: dashboard, metrik, pengguna, rentang tanggal, dan keputusan mana yang terpengaruh. Pastikan apakah angkanya memang salah atau justru deployment tersebut memperbaiki masalah sebelumnya.
Bandingkan output baru dengan versi sebelumnya berdasarkan tabel, partisi, jumlah baris, distinct count, total metrik, dan segmen utama. Gunakan lineage untuk mengidentifikasi perubahan di upstream. Periksa perubahan kode, perubahan skema, filter, join, deduplikasi, dan logika tanggal.
Jika metriknya salah dan pengguna bisnis terdampak, segera lakukan mitigasi: rollback transformasi, pulihkan versi tabel sebelumnya, nonaktifkan dashboard, atau tambahkan peringatan. Setelah itu, lakukan analisis akar masalah (root cause analysis) dan backfill data yang sudah dikoreksi jika perlu.
Komunikasi itu penting. Beri tahu stakeholder apa yang berubah, apa yang terdampak, seberapa yakin Anda, perkiraan waktu perbaikan, dan apakah keputusan sebelumnya perlu ditinjau ulang.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda tahu angka lama atau angka baru yang benar?
Opsi rollback apa yang Anda butuhkan?
Bagaimana lineage bisa membantu?
Contoh Penerapan
Daftar periksa insiden data produksi
Dashboard pendapatan untuk eksekutif tidak menampilkan data kemarin, padahal rapat pimpinan tinggal dua jam lagi.
1
Triase
Periksa status pipeline, kesegaran data sumber, partisi tabel warehouse, task yang gagal, dan apakah masalahnya hanya memengaruhi data pendapatan atau semua dashboard.
2
Mitigasi
Jika data sumber tersedia, jalankan ulang partisi yang terdampak. Jika tidak, beri catatan di dashboard dan sajikan angka terbaru yang tersedia beserta catatan keterbatasannya.
3
Komunikasi
Sampaikan kepada stakeholder data apa yang hilang, keputusan apa yang terdampak, perkiraan waktu penyelesaian, dan apakah angkanya mungkin berubah.
4
Pencegahan
Tambahkan alert kesegaran data, pemeriksaan sumber upstream, monitoring SLA, dan runbook untuk kegagalan pipeline pendapatan.
Hasil
Respons ini menjaga kepercayaan dengan memadukan pemulihan teknis dan komunikasi yang jelas kepada stakeholder.
System Design untuk Data Engineering
Wawancara system design untuk data engineering menilai kematangan Anda dalam merancang arsitektur: sumber data, ingestion, penyimpanan, transformasi, serving, kualitas, lineage, tata kelola, dan biaya.
Mulailah dari kebutuhannya: volume event, latensi, konsumen, retensi, evolusi skema, privasi, dan keandalan. Event analitik produk bisa menjadi dasar dashboard, eksperimen, personalisasi, dan fitur machine learning.
Aplikasi klien mengirim event melalui SDK dengan event_name, user_id, session_id, timestamp, properties, versi aplikasi, platform, dan anonymous ID. Event masuk ke ingestion API atau event collector, lalu ke stream yang tahan lama seperti Kafka/Kinesis/Pub/Sub. Event mentah ditulis ke object storage untuk replay dan ke warehouse atau lakehouse untuk analitik.
Pemrosesan mencakup validasi skema, deduplikasi, pemfilteran bot/internal, sessionization, identity resolution, dan transformasi ke tabel hasil pemodelan seperti fact_events, fact_sessions, dim_users, dan data mart khusus produk. Jalur batch dan streaming bisa berjalan berdampingan, tergantung kebutuhan kesegaran data.
Kualitas dan tata kelola: event contract, schema registry, penanganan PII (data pribadi), penegakan persetujuan pengguna (consent), lineage, kepemilikan, pemeriksaan kesegaran data, alert anomali volume, dan dokumentasi. Lapisan serving mencakup dashboard BI, analisis eksperimen, reverse ETL, dan feature store.
Trade-off-nya meliputi biaya real-time versus batch, skema ketat versus fleksibel, retensi event mentah, kompleksitas identitas, dan seberapa banyak logika yang ditempatkan di tahap ingestion versus transformasi.
Feature store harus menyediakan fitur yang dapat dipakai ulang dan andal, baik untuk pelatihan maupun serving. Kebutuhannya mencakup definisi fitur, point-in-time correctness (nilai fitur sesuai titik waktunya), data pelatihan offline, serving online berlatensi rendah, kesegaran data, kontrol akses, dan monitoring.
Fitur offline dapat disimpan di warehouse atau lakehouse, dipartisi berdasarkan tanggal dan entitas. Fitur online dapat disajikan dari key-value store berlatensi rendah. Feature registry menyimpan metadata: nama fitur, pemilik, entity key, logika transformasi, SLA kesegaran, tabel sumber, dan deskripsi.
Point-in-time correctness sangat krusial. Data pelatihan harus menggunakan nilai fitur yang tersedia pada saat prediksi, bukan nilai dari masa depan. Untuk konsistensi online/offline, logika transformasi yang sama sebaiknya dipakai ulang bila memungkinkan, atau diuji secara menyeluruh jika pipeline-nya terpisah.
Monitoring harus mencakup kesegaran fitur, tingkat null, distribution drift, latensi serving online, training-serving skew, dan dampaknya pada model downstream. Tata kelola mencakup kontrol PII, lineage, penghentian fitur (deprecation), dan kepemilikan.
Kemungkinan pertanyaan lanjutan
Apa itu point-in-time correctness?
Bagaimana Anda menghindari training-serving skew?
Fitur apa saja yang membutuhkan serving online?
Pertanyaan Perilaku dan Kolaborasi
Wawancara perilaku untuk data engineering berfokus pada tanggung jawab atas sistem produksi, penanganan insiden, komunikasi lintas fungsi, penentuan prioritas, dan kemampuan membangun sistem yang bisa dipercaya tim lain.
Kerangka: Dampak -> triase -> mitigasi -> akar masalah -> pencegahan
Pilih insiden yang berdampak nyata: data hilang, metrik salah, pipeline tertunda, record duplikat, dashboard rusak, masalah pada fitur model, atau dampak pada produk di downstream. Awali dengan menjelaskan siapa yang terdampak dan mengapa hal itu penting.
Lalu jelaskan proses triase Anda: log, status orkestrasi, kesegaran data sumber, deployment terbaru, perubahan skema, jumlah baris, partisi, lineage, dan dependensi downstream. Jelaskan cara Anda memitigasi masalahnya: menjalankan ulang, rollback, patch, backfill, atau memberi peringatan kepada stakeholder.
Jawaban terkuat mencakup pencegahan. Apakah Anda menambahkan pemeriksaan kualitas data, alert, retry, schema contract, penulisan yang idempoten, runbook, lineage, atau kontrol deployment yang lebih baik? Hindari menyalahkan tim upstream. Tunjukkan rasa kepemilikan atas sistem dan komunikasinya.
Tutup dengan pelajaran yang Anda petik tentang keandalan dan bagaimana proses kerja Anda berubah setelahnya.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda mengomunikasikan dampaknya?
Apa yang seharusnya bisa mendeteksi masalah itu lebih awal?
Pertama, perjelas apa persisnya yang tampak salah: metrik, tabel, rentang tanggal, dashboard, filter, nilai yang diharapkan, dan alasan bisnisnya. Keluhan “datanya salah” perlu diubah menjadi masalah yang bisa direproduksi.
Lalu bandingkan query atau dashboard analis dengan tabel sumber dan definisi model. Periksa grain, filter, join, zona waktu, kesegaran data, definisi metrik, dan perubahan terbaru. Gunakan lineage untuk menelusuri dependensi upstream.
Jika datanya memang salah, perbaiki dan komunikasikan dampaknya. Jika datanya benar tetapi definisinya berbeda dari yang diharapkan, samakan pemahaman tentang definisi metrik dan dokumentasinya. Jika masih ada ketidakpastian, jelaskan apa yang sudah diketahui, apa yang sedang diperiksa, dan kapan Anda akan memberi kabar lanjutan.
Hubungan kerja itu penting. Analis adalah pelanggan platform data, dan kepercayaan dibangun lewat respons yang cepat, jelas, dan berbasis bukti.
Kemungkinan pertanyaan lanjutan
Bagaimana jika analis menggunakan tabel dengan cara yang keliru?
Bagaimana Anda mencegah kebingungan yang berulang?
Saya menentukan prioritas berdasarkan dampak bisnis, risiko keandalan, urgensi, dependensi downstream, dan daya ungkit. Pipeline pendapatan yang rusak atau masalah kepatuhan biasanya lebih didahulukan daripada model dashboard yang sifatnya sekadar pelengkap. Perbaikan platform bisa lebih diprioritaskan daripada permintaan sekali pakai jika perbaikan itu membuka jalan bagi banyak tim.
Saya juga membedakan antara insiden mendesak, pekerjaan platform yang strategis, permintaan stakeholder, technical debt, dan pekerjaan operasional yang repetitif. Jika tim hanya mengerjakan tiket, keandalan dan kualitas platform akan menurun. Jika tim hanya membangun abstraksi platform, tim bisnis bisa terhambat.
Proses penentuan prioritas yang kuat mencakup kepemilikan, SLA, tingkat keparahan, keselarasan dengan roadmap, dan trade-off yang transparan. Saya akan mengomunikasikan apa yang sedang dikerjakan, apa yang ditunda, alasannya, dan risiko apa yang timbul karenanya.
Kemungkinan pertanyaan lanjutan
Bagaimana Anda menjustifikasi pekerjaan technical debt?
Bagaimana jika pimpinan meminta dashboard secara mendesak?
Bagaimana Anda menyeimbangkan penanganan insiden dan roadmap?
Strategi Persiapan Data Engineer
Persiapan wawancara data engineer sebaiknya memadukan SQL, pemodelan data, Python, desain pipeline, sistem terdistribusi, konsep cloud warehouse, dan kemampuan menceritakan insiden produksi.
Rencana persiapan wawancara data engineer selama 6 minggu
1
Minggu 1: kedalaman SQL. Latih join, window function, deduplikasi, model inkremental, kohort, partisi, dan debugging performa.
2
Minggu 2: pemodelan data. Latih tabel fakta, dimensi, grain, SCD, model event, data mart warehouse, dan definisi metrik.
3
Minggu 3: pipeline. Latih desain ETL/ELT, idempotensi, orkestrasi, backfill, data terlambat, perubahan skema, dan pemeriksaan kualitas data.
4
Minggu 4: pemrosesan terdistribusi. Pelajari kembali Spark, shuffle, partisi, skew, format file, konsep streaming, dan trade-off biaya/performa.
5
Minggu 5: system design. Latih platform analitik produk, ingestion CDC, feature store, pipeline fraud berbasis streaming, dan arsitektur warehouse.
6
Minggu 6: simulasi wawancara dan cerita pengalaman. Siapkan contoh tentang insiden pipeline, kualitas data, stakeholder, penentuan prioritas, dan perbaikan platform.
Persiapan sesuai jalur data engineering
•
Analytics engineering: fokus pada dbt, model SQL, semantic layer, definisi metrik, keandalan BI, dan alur kerja stakeholder.
•
Platform data engineering: fokus pada sistem ingestion, orkestrasi, lineage, tata kelola, kontrol akses, dan pengalaman developer.
•
Streaming data engineering: fokus pada Kafka, Flink/Spark streaming, state, window, duplikat, urutan data, replay, dan latensi.
•
ML data engineering: fokus pada pipeline fitur, feature store, point-in-time correctness, data pelatihan, dan monitoring.
•
Cloud warehouse engineering: fokus pada Snowflake, BigQuery, Databricks, partisi, clustering, pengendalian biaya, dan workload management.
Jangan hanya membahas tool
Bagi pewawancara, sekadar hafal nama Airflow, dbt, Spark, atau Kafka tidak sepenting pemahaman Anda tentang keandalan, ketepatan data, trade-off, dan pola kegagalan (failure mode).
Poin Penting
Jawaban wawancara data engineer yang hebat memadukan ketepatan SQL, kejelasan pemodelan data, keandalan pipeline, nalar sistem terdistribusi, dan tanggung jawab atas sistem produksi. Kandidat terbaik menunjukkan bahwa mereka mampu membangun sistem data yang bisa dipercaya tim lain.
Latih pertanyaan ini secara langsung
Interview Pilot memberi Anda asisten wawancara AI real-time selama wawancara langsung, sehingga Anda dapat menjawab dengan jelas saat pertanyaan-pertanyaan ini muncul.