TL;DR
Data lake nyimpen file mentah apa adanya dan murah, tapi rawan berantakan. Data warehouse nyimpen data yang udah dirapikan jadi tabel dan cepat buat laporan, tapi biayanya lebih mahal. Lakehouse gabungin keduanya: file murah di storage objek plus lapisan tabel yang bisa di-query kayak warehouse.
Data lake nyimpen file mentah apa adanya, data warehouse nyimpen data yang udah dirapikan jadi tabel siap query, dan lakehouse gabungin keduanya di satu tempat penyimpanan murah.
Tiga istilah ini sering muncul di rapat, sering juga ketuker. Padahal salah pilih di awal bikin tim kamu bayar dua kali: sekali buat bikin, sekali lagi buat migrasi.
Aku bandingin ketiganya pakai satu kasus yang sama, yaitu toko_berkah, retail 12 cabang di Jawa Tengah yang datanya aku pakai buat latihan di ngulikdata.
Data lake adalah tempat penyimpanan yang nampung file dalam bentuk aslinya, tanpa dirapikan dulu. CSV, JSON, foto struk, log aplikasi, rekaman chat, semuanya masuk. Struktur datanya baru ditentukan waktu kamu baca file itu, bukan waktu nyimpan. Sifat ini yang bikin data lake murah dan fleksibel.
Secara teknis, data lake biasanya cuma storage objek. Amazon S3, Google Cloud Storage, atau Azure Blob. Kamu bayar per GB per bulan, dan angkanya kecil banget dibanding database.
Di toko_berkah, yang masuk data lake itu hal-hal yang nggak berbentuk tabel rapi. Log klik dari toko online, file JSON dari webhook marketplace, dan 3.400 foto bukti kirim dari kurir.
Masalahnya satu: nyimpen gampang, nyari susah. Tanpa katalog dan penamaan yang konsisten, setahun kemudian nggak ada yang tau file export_final_v3_fix.csv itu isinya apa.
Data warehouse adalah database yang dirancang khusus buat analisis. Datanya udah dibersihkan, distandarkan, dan disusun jadi tabel dengan kolom yang jelas. Struktur ditentukan di depan, sebelum data masuk. Hasilnya, query buat laporan jalan cepat dan angkanya konsisten antar tim.
Proses masukin datanya biasa disebut ETL, yaitu ambil data dari sumber, rapikan, lalu simpan ke warehouse.
Contoh produknya: BigQuery, Snowflake, Amazon Redshift, atau PostgreSQL biasa buat skala kecil.
Di toko_berkah, warehouse isinya tabel transaksi, produk, cabang, dan pelanggan. Semua kolom tanggal formatnya sama, semua nama cabang udah distandarkan, dan kolom total_belanja selalu dalam rupiah tanpa titik ribuan.
Kelemahannya biaya. Warehouse ngitung ongkos dari komputasi dan penyimpanan terstruktur, jadi nyimpen 500 GB log mentah di warehouse itu pemborosan.
Lakehouse adalah pola penyimpanan yang naruh file di storage objek murah, lalu nambahin lapisan format tabel di atasnya. Lapisan itu yang bikin file bisa di-update, dihapus baris tertentu, di-rollback ke versi kemarin, dan di-query pakai SQL kayak warehouse. Jadi kamu dapat harga data lake dengan kelakuan data warehouse.
Lapisan tabelnya biasanya Delta Lake, Apache Iceberg, atau Apache Hudi. File fisiknya sendiri format Parquet, yaitu format kolom yang ukurannya jauh lebih kecil dari CSV.
Aku pernah convert satu tahun transaksi toko_berkah dari CSV ke Parquet. Ukurannya turun dari 412 MB jadi 47 MB, dan query hitung total penjualan per cabang yang tadinya 9 detik jadi 1,4 detik di laptop yang sama.
Konsep lakehouse relatif baru dibanding dua lainnya, jadi ekosistem alatnya masih berubah cepat. Kalau tim kamu kecil, ini risiko yang perlu dihitung.
| Aspek | Data Lake | Data Warehouse | Lakehouse |
|---|---|---|---|
| Bentuk data | File mentah apa adanya | Tabel terstruktur | File Parquet + lapisan tabel |
| Struktur ditentukan | Waktu dibaca | Waktu ditulis | Waktu ditulis, tapi bisa diubah |
| Biaya penyimpanan | Paling murah | Paling mahal | Murah |
| Kecepatan query laporan | Lambat | Cepat | Cepat |
| Cocok buat | Log, gambar, JSON, data mentah | Laporan, dashboard, KPI | Campuran keduanya |
| Pengguna utama | Data engineer | Analis dan tim bisnis | Keduanya |
| Risiko utama | Jadi tumpukan file tanpa arti | Biaya membengkak | Alatnya masih cepat berubah |
Baris yang paling sering bikin salah pilih itu baris pengguna utama. Kalau yang bakal pakai setiap hari adalah analis yang jago SQL tapi nggak nyentuh Python, data lake murni bakal bikin mereka mandek.
Jawaban singkatnya: mulai dari warehouse, tambah lake kalau ada data yang bukan tabel, pindah ke lakehouse kalau biaya warehouse mulai kerasa.
Sebelum mutusin arsitekturnya, aturan main soal siapa yang punya data mana harus jelas duluan. Aku bahas kerangkanya di data governance untuk tim data kecil.
Toko_berkah punya 12 cabang, sekitar 4.800 transaksi per bulan, dan tim data isinya 2 orang. Satu analis, satu orang IT yang juga ngurus kasir.
Data yang mereka punya:
Keputusannya jadi jelas begitu dipisah. Transaksi, produk, dan stok masuk warehouse karena itu yang dipakai buat laporan mingguan. JSON webhook dan foto bukti kirim masuk storage objek murah, dan cuma diproses kalau ada keperluan tertentu.
Angka yang bikin keputusan ini gampang: kalau semua 6,8 GB foto plus log JSON dipaksa masuk warehouse, biaya penyimpanan bulanannya naik sekitar 14 kali lipat dibanding naruh file yang sama di storage objek. Sementara nilai analitiknya nyaris nol, karena nggak ada satupun laporan mingguan yang pakai foto.
Pola ini yang aku sebut warehouse dulu, lake nyusul. Untuk tim di bawah 5 orang, ini yang paling cepat jalan.
1. Bikin data lake karena keren, bukan karena butuh. Kalau semua data kamu berbentuk tabel dan volumenya di bawah 50 GB, data lake cuma nambah kerjaan.
2. Nyimpen semua data mentah ke warehouse. Log aplikasi yang 900 MB per bulan itu bakal jadi tagihan yang bikin kaget di bulan keempat.
3. Nggak bikin katalog dari hari pertama. Satu spreadsheet berisi nama dataset, isi, pemilik, dan tanggal update terakhir udah cukup buat awal.
4. Ngeskip pembersihan data. Mau arsitekturnya apapun, kalau nama cabang di sumbernya ditulis lima versi berbeda, laporannya tetap salah. Cek dulu soal kualitas data sebelum mikirin storage.
5. Ngira lakehouse bikin transformasi jadi nggak perlu. Tetap perlu. Datanya tetap harus dirapikan jadi tabel yang siap dipakai, dan alat kayak dbt yang ngerjain itu. Kalau belum pernah, coba dulu bikin model dbt pertama.
6. Nggak nentuin definisi metrik. Arsitektur nggak nyelesaiin masalah dua tim ngitung KPI yang sama dengan rumus berbeda.
Beda. Database biasa nyimpen data dalam bentuk tabel dengan struktur yang udah ditentukan di awal. Data lake nyimpen file apa adanya: CSV, JSON, foto struk, log aplikasi. Kamu baru nentuin strukturnya waktu mau baca. Makanya data lake fleksibel buat data yang bentuknya belum jelas, tapi butuh usaha ekstra sebelum bisa dipakai laporan.
Kalau data kamu masih muat di spreadsheet dan semuanya berbentuk tabel, nggak butuh. Data lake baru masuk akal kalau kamu mulai nyimpen hal yang bukan tabel, misalnya rekaman chat CS, foto bukti kirim, atau log klik dari toko online. Sebelum itu, satu database plus spreadsheet udah cukup.
Konsep, tapi ada produk yang ngejalanin. Intinya kamu simpan file Parquet di storage murah, lalu pakai format tabel kayak Delta Lake, Apache Iceberg, atau Apache Hudi biar file itu bisa di-update, di-rollback, dan di-query kayak tabel warehouse. Databricks, Snowflake, dan BigQuery sekarang sama-sama dukung pola ini.
Mulai dari warehouse kecil. Satu database analitik, satu skema mentah, satu skema rapi, dan alat transformasi kayak dbt. Pola ini yang paling cepat kasih hasil karena tim kamu bisa langsung nulis SQL. Data lake bisa nyusul kalau nanti ada data yang bentuknya bukan tabel.
Soalnya nyimpen file itu gampang, ngerapiinnya yang susah. Kalau nggak ada katalog, penamaan yang konsisten, dan pemilik yang jelas per dataset, dalam setahun kamu punya ribuan file yang nggak ada yang tau isinya apa. Aturan main soal kepemilikan data harus jalan duluan sebelum volume filenya naik.
Tiga hal yang perlu kamu inget:
Buat detail teknis storage objek dan pola data lake, dokumentasi resmi AWS soal data lake penjelasannya cukup lengkap dan netral.
Sekarang giliran kamu. Buka daftar dataset yang tim kamu punya, tandai mana yang berbentuk tabel dan mana yang bukan. Dari situ pilihan arsitekturnya bakal kelihatan sendiri.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Kolom waktu isinya angka gede kayak 1704067200 dan bikin bingung? Itu Unix timestamp. Ini cara ngubahnya jadi tanggal beneran di SQL, plus balik lagi.
Data transaksi tersimpan UTC, tapi laporan harus jam WIB. Kalau salah konversi, angka penjualan tengah malam bisa kecatat di tanggal yang salah. Ini cara handle timezone di SQL dengan benar.
Nambah 30 hari ke tanggal invoice, ngurangin sebulan buat cari periode lalu, ngitung selisih hari antar order. Semua itu aritmetika tanggal, dan SQL punya operator INTERVAL buat ngerjainnya.