DuckDB: Menganalisis CSV 5 Juta Baris di Laptop Terbatas
Blog/Tips & Trik/DuckDB: Menganalisis CSV 5 Juta Baris di Laptop Terbatas

DuckDB: Menganalisis CSV 5 Juta Baris di Laptop Terbatas

BimaBima
·5 Desember 2025·12 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

DuckDB adalah database analitik yang jalan sebagai satu file kecil di laptop kamu, tanpa server dan tanpa proses instalasi yang ribet. Dia bisa query file CSV atau Parquet secara langsung pakai SQL biasa, termasuk file yang ukurannya lebih besar dari RAM. Di uji coba CSV 5,2 juta baris (1,4 GB) di laptop RAM 8 GB, agregasi per kota selesai dalam 3,4 detik.

Excel berhenti di 1.048.576 baris. File transaksi setahun kamu isinya 5,2 juta.

Pilihan yang biasa muncul: pecah filenya jadi enam, atau minta akses database ke tim IT dan nunggu dua minggu.

DuckDB ngasih jalan ketiga. Satu file kecil, nggak ada server, dan kamu bisa nulis SQL langsung ke file CSV-nya. Di laptop RAM 8 GB, agregasi omzet per kota dari 5,2 juta baris selesai 3,4 detik.

Apa itu DuckDB?

DuckDB adalah database analitik yang jalan di dalam proses aplikasi kamu, bukan sebagai layanan terpisah. Nggak ada server yang harus dinyalain, nggak ada port, nggak ada user dan password. Dia bisa baca file CSV dan Parquet secara langsung pakai SQL standar, termasuk file yang lebih besar dari RAM.

Cara nyimpen datanya beda dari database yang biasa kamu pakai. PostgreSQL dan MySQL nyimpen per baris, bagus buat aplikasi yang nulis satu transaksi tiap kali. DuckDB nyimpen per kolom, bagus buat pertanyaan model "total penjualan per kota" yang cuma nyentuh 3 dari 20 kolom.

Itu sebabnya query agregasi di DuckDB bisa jauh lebih cepat. Dia nggak baca kolom yang nggak kamu sebut.

Gimana cara pasang DuckDB?

Ada tiga cara, pilih satu.

Lewat Python:

pip install duckdb

Lewat terminal: unduh satu file binary dari halaman rilis resmi, taruh di folder mana pun, lalu jalanin.

duckdb

Lewat R:

install.packages("duckdb")

Nggak ada langkah konfigurasi setelahnya. Panduan pemasangan buat tiap sistem operasi ada di halaman instalasi resmi DuckDB.

Gimana cara baca CSV besar tanpa impor dulu?

Sebut nama filenya di posisi tabel. Itu doang.

SELECT * FROM 'transaksi_2025.csv' LIMIT 10;

DuckDB otomatis nebak pemisah kolom, ada tidaknya baris judul, dan tipe tiap kolom. Buat lihat hasil tebakannya:

DESCRIBE SELECT * FROM 'transaksi_2025.csv';

Cek hasil DESCRIBE sebelum lanjut. Kolom order_id yang isinya 0012345 gampang ketebak jadi angka, dan nol di depannya hilang. Kolom nomor telepon juga sering kena.

Kalau tebakannya meleset, tentukan sendiri:

CREATE VIEW transaksi AS
SELECT * FROM read_csv(
    'transaksi_2025.csv',
    delim = ',',
    header = true,
    types = {
        'order_id': 'VARCHAR',
        'tanggal': 'DATE',
        'kota': 'VARCHAR',
        'kategori': 'VARCHAR',
        'qty': 'INTEGER',
        'nilai': 'BIGINT'
    }
);

Bikin VIEW bukan TABLE di sini disengaja. View nggak nyalin datanya, jadi nggak makan disk tambahan. Filenya tetap dibaca dari tempat asal tiap kali kamu query.

Gimana biar nggak kehabisan RAM waktu query file besar?

Tiga pengaturan yang dijalanin di awal sesi:

SET memory_limit = '4GB';
SET temp_directory = '/tmp/duckdb_spill';
SET threads = 4;

memory_limit nentuin batas atas pemakaian memori. Isi sekitar setengah RAM laptop kamu, biar sistem operasi dan browser masih punya jatah.

temp_directory nentuin folder tempat DuckDB numpahin data waktu memori penuh. Tanpa ini, query berat bisa berhenti dengan pesan kehabisan memori. Pastiin folder itu ada di disk yang ruangnya masih lega, minimal dua kali ukuran file kamu.

threads nentuin jumlah inti prosesor yang dipakai. Di laptop 4 inti, isi 4. Kalau kamu mau tetap bisa kerja lain sambil query jalan, isi 2.

Daftar lengkap pengaturan yang bisa disetel ada di dokumentasi konfigurasi DuckDB.

Query apa yang paling sering kepakai buat data transaksi?

Sintaksnya SQL biasa. Kalau kamu udah pernah nulis GROUP BY, kamu udah bisa pakai DuckDB.

Agregasi per kota per bulan:

SELECT kota,
       date_trunc('month', tanggal) AS bulan,
       COUNT(*) AS jumlah_transaksi,
       SUM(nilai) AS omzet,
       ROUND(AVG(nilai)) AS rata_rata_nilai
FROM transaksi
WHERE tanggal >= DATE '2025-01-01'
GROUP BY kota, bulan
ORDER BY omzet DESC;

Pemeriksaan kualitas data dalam satu query:

SELECT COUNT(*) AS baris,
       COUNT(DISTINCT order_id) AS order_unik,
       COUNT(*) FILTER (WHERE kota IS NULL) AS kota_kosong,
       COUNT(*) FILTER (WHERE nilai <= 0) AS nilai_janggal
FROM transaksi;

Klausa FILTER di sini bikin kamu bisa ngitung beberapa kondisi berbeda sekaligus dalam satu kali baca file. Jauh lebih cepat dibanding jalanin empat query terpisah.

Kalau fungsi agregat kayak COUNT dan SUM masih terasa asing, polanya sama persis kayak di spreadsheet: SUMIFS jadi SUM dengan WHERE, COUNTIFS jadi COUNT dengan WHERE.

Kapan sebaiknya CSV diubah jadi Parquet?

Kalau file yang sama bakal kamu query lebih dari tiga kali.

COPY (SELECT * FROM transaksi)
TO 'transaksi_2025.parquet' (FORMAT PARQUET, COMPRESSION ZSTD);

Hasil di file uji aku:

FormatUkuran fileWaktu agregasi per kota
CSV1,42 GB3,4 detik
Parquet (ZSTD)184 MB0,6 detik

Ukurannya turun 87%, waktunya turun jadi seperlima. Proses konversinya sendiri 11 detik, jadi balik modal di query kedua.

Parquet juga bisa dipecah jadi banyak file dan diquery sekaligus:

SELECT kota, SUM(nilai) AS omzet
FROM 'data/transaksi_2025_*.parquet'
GROUP BY kota;

Tanda bintang di situ nyapu semua file yang cocok. Berguna kalau data kamu datang per bulan dalam file terpisah.

Contoh kasus: 5,2 juta transaksi di laptop RAM 8 GB

File uji aku: transaksi_2025.csv, 5.243.180 baris, 1,42 GB, 9 kolom. Laptop RAM 8 GB, prosesor 4 inti, SSD.

Aku bandingin tiga cara ngerjain pertanyaan yang sama: omzet per kota per bulan.

CaraWaktuPuncak pemakaian RAMCatatan
Excelgagal-Kelebihan batas 1.048.576 baris
pandas read_csv1 menit 52 detik6,8 GBLaptop nyaris nggak kepakai selama proses
DuckDB dari CSV3,4 detik1,1 GBTanpa impor, langsung dari file
DuckDB dari Parquet0,6 detik0,4 GBSetelah konversi 11 detik

Selisih waktu yang 33 kali lipat itu menarik, tapi bukan itu yang paling ngefek buat kerjaan harian. Yang ngefek angka RAM.

Dengan pandas, laptop kepakai penuh selama hampir dua menit dan aku nggak bisa ngapa-ngapain. Dengan DuckDB, aku bisa buka browser dan lanjut kerja sambil query jalan.

Temuan lain dari pemeriksaan kualitas datanya: dari 5.243.180 baris, ada 3.812 order_id yang muncul dua kali. Cuma 0,07%, tapi total nilainya Rp 1,91 miliar. Kalau baris ganda itu nggak ketahuan, laporan tahunan kamu kelebihan Rp 1,91 miliar dari angka yang bener.

Pemeriksaan itu jalan 0,9 detik pakai satu query COUNT(DISTINCT ...). Di Excel, buat 5 juta baris, kerjaan ini nggak mungkin dilakukan sama sekali.

Kesalahan umum waktu mulai pakai DuckDB

  • Nggak ngecek DESCRIBE sebelum query. Kolom order_id yang isinya 0012345 bisa ketebak jadi angka, dan nol di depannya hilang. Cek tipe kolom duluan, tentukan manual kalau perlu.
  • Lupa nyetel temp_directory. Query berat berhenti dengan pesan kehabisan memori, padahal cuma butuh tempat numpahin data ke disk.
  • Bikin TABLE padahal cukup VIEW. CREATE TABLE ... AS SELECT nyalin seluruh data ke file database. Kalau kamu cuma mau baca, VIEW lebih hemat.
  • Ngurutin jutaan baris tanpa LIMIT. ORDER BY di 5 juta baris tanpa batas itu operasi paling berat yang bisa kamu jalanin. Tambahin LIMIT 100 kecuali kamu beneran butuh semuanya.
  • Ekspor data mentah ke Excel. Ekspor hasil agregasinya. Ringkasan 400 baris per kota per bulan lebih berguna dibanding 5 juta baris yang bikin filenya nggak kebuka.
  • Ngira DuckDB pengganti PostgreSQL. DuckDB dirancang buat analisis, satu penulis dalam satu waktu. Buat aplikasi yang dipakai banyak orang bareng dan nulis terus-menerus, tetap pakai database yang memang buat itu.
  • Nggak nyimpan query-nya. Simpan file .sql di folder yang sama sama datanya. Tiga bulan lagi kamu nggak bakal inget filter apa yang kamu pakai.

FAQ

DuckDB perlu install server kayak PostgreSQL?

Nggak perlu. DuckDB jalan di dalam proses aplikasi kamu, mirip SQLite. Kamu cukup pasang lewat pip install duckdb buat Python, atau unduh satu file binary buat dipakai di terminal. Nggak ada layanan yang harus dinyalain, nggak ada port yang harus dibuka, dan nggak ada user atau password yang perlu diatur.

DuckDB bisa baca file yang lebih besar dari RAM?

Bisa, selama kamu nyetel batas memori dan folder sementara. DuckDB bakal numpahin data ke disk waktu memori penuh. Query agregasi dan filter aman dijalankan. Yang berat itu operasi yang butuh nahan seluruh data sekaligus, misalnya urutan penuh di jutaan baris atau JOIN antar dua tabel raksasa tanpa filter.

Lebih cepat mana, DuckDB atau pandas?

Buat agregasi di file besar, DuckDB biasanya lebih cepat dan jauh lebih hemat memori, soalnya dia baca kolom yang dibutuhkan doang dan bisa numpahin ke disk. pandas nyimpen semuanya di RAM, jadi file 1,4 GB gampang bengkak jadi beberapa GB. Buat data di bawah 100 ribu baris, bedanya nggak berasa dan pilih yang kamu lebih nyaman.

Apa itu Parquet dan kenapa lebih baik dari CSV?

Parquet adalah format file yang nyimpen data per kolom dan udah dikompres. Ukurannya biasanya 4 sampai 10 kali lebih kecil dari CSV yang isinya sama. Waktu kamu query 3 kolom dari 20 kolom, DuckDB cuma baca 3 kolom itu. Kalau file yang sama bakal kamu query berkali-kali, ubah sekali ke Parquet dan sisanya jadi jauh lebih cepat.

Hasil query DuckDB bisa dibawa ke Excel?

Bisa. Pakai perintah COPY dengan tujuan file CSV, lalu buka hasilnya di Excel. Yang penting, ekspor hasil agregasinya, bukan data mentahnya. Ringkasan 400 baris per kota per bulan jauh lebih berguna di Excel dibanding 5 juta baris yang bikin filenya nggak kebuka.

Penutup

Tiga hal yang bikin DuckDB kepakai buat file raksasa: query langsung ke file tanpa impor, batas memori yang bisa disetel plus tumpahan ke disk, dan konversi ke Parquet buat file yang sering dipakai.

Kalau kamu mau coba hari ini, mulai dari satu baris: SELECT COUNT(*) FROM 'filekamu.csv'. Sepuluh detik, dan kamu udah tahu berapa baris data yang selama ini nggak kebuka di Excel.

Mau ngasah SQL-nya dulu sebelum ngadepin file jutaan baris? Coba latihan interaktif di NgulikSQL, langsung ketik di browser. Kalau datanya udah masuk database bersama tim, cara ngatur siapa boleh lihat apa ada di panduan hak akses data tim kecil.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

Pandas groupby: Agregasi Data ala Pivot di Python (2026)

groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

Pandas to_excel: Ekspor DataFrame ke Excel (2026)

to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

Pandas read_excel: Baca File Excel di Python

pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore