Kenapa Polars 2.0 Klaim Kalahkan DuckDB di Benchmark SQL?
Polars 2.0 rilis: streaming engine jadi default, out-of-core aktif, SQL first-class, dan klaim mengungguli DuckDB serta DataFusion di benchmark TPC-H/TPC-DS.
Kalau kamu pernah mengolah data yang ukurannya terus membesar, kamu pasti kenal rasa frustrasinya. Query yang kemarin jalan mulus tiba-tiba melahap seluruh RAM, laptop macet, dan kamu harus mengulang dari awal dengan cara yang lebih hemat memori.
Kabar baiknya, Polars 2.0 baru saja dirilis minggu ini, dan perubahan terbesarnya menyasar masalah itu secara langsung. Tim Polars mengklaim engine barunya membawa lompatan performa sekitar lima kali lipat untuk query LazyFrame, tanpa kamu perlu mengubah satu baris kode pun.
Tapi yang paling mengejutkan bukan angka kecepatannya. Polars 2.0 juga berani mengklaim mengungguli DuckDB dan DataFusion di benchmark SQL standar industri seperti TPC-H dan TPC-DS. Mari bedah apa yang sebenarnya berubah di rilis ini.

Apa yang Berubah di Polars 2.0
Menariknya, tim Polars sendiri mengakui rilis ini awalnya tidak direncanakan sebagai rilis fitur besar. Kenaikan versi mayor justru dipicu satu perubahan perilaku yang cukup berani, yaitu menjadikan streaming engine sebagai default. Meski begitu, isi rilisnya tetap padat.
Ada lima sorotan utama menurut pengumuman resminya. Pertama, streaming engine menjadi default untuk semua query. Kedua, dukungan awal out-of-core atau spill to disk. Ketiga, SQL dipromosikan menjadi warga kelas satu di dalam Polars. Keempat, tipe data Map yang baru. Kelima, aturan yang lebih ketat soal tipe data dan perilaku API.
Kombinasi kelimanya menunjukkan arah yang jelas. Polars tidak lagi sekadar ingin menjadi library DataFrame yang cepat, tapi mesin analitik yang tangguh untuk workload besar, ramah SQL, dan memberi umpan balik kesalahan secepat mungkin.
Streaming Engine Jadi Default untuk Semua Query
Perubahan paling berdampak ada di sini. Memanggil `collect()` pada `LazyFrame` kini otomatis memakai streaming engine, bukan engine in-memory seperti sebelumnya. Hasilnya, sebagian besar query mendapat peningkatan besar baik dari sisi memori maupun kecepatan, dan Polars mengklaim angkanya sekitar lima kali lebih cepat.
Inilah alasan kenapa rilis ini butuh angka versi mayor. Streaming engine tidak menjamin urutan baris untuk operasi tertentu seperti `join`, `group_by`, dan `unpivot`. Kalau kodemu selama ini diam-diam mengandalkan urutan keluaran lama, ia bisa rusak setelah upgrade.
Solusinya sederhana. Kalau kamu butuh urutan baris yang bisa diobservasi, tambahkan `maintain_order=True` secara eksplisit. Prinsipnya: yang dulu hanya implisit, sekarang harus dinyatakan dengan jelas. Polars juga menyediakan panduan migrasi resmi untuk membantu proses upgrade ini.
Out-of-Core: Query Boleh Lebih Besar dari RAM
Pasangan dari streaming engine adalah dukungan out-of-core, yaitu kemampuan menumpahkan data sementara ke disk saat RAM mulai penuh. Fitur ini kini aktif secara default dan mulai spill saat pemakaian memori menyentuh sekitar 80 persen RAM.
Budget disk defaultnya 64GB. Operasi yang sudah mendukung out-of-core saat ini antara lain sort, window function, dan banyak ekspresi umum. Untuk join dan group-by, dukungannya masih dalam roadmap dan akan menyusul.
Dampaknya terasa untuk praktisi data kasual. Query yang dulu gagal dengan out-of-memory kini punya peluang selesai karena Polars bisa meminjam disk sebagai penyangga. Bukan pengganti mesin distributed seperti Spark, tapi cukup untuk membuat workload satu mesin jauh lebih tangguh.
SQL Jadi Warga Kelas Satu dan Klaim Benchmarknya
Polars 2.0 menandai titik di mana SQL diperlakukan sebagai warga kelas satu. Cakupan SQL-nya meningkat drastis dalam beberapa bulan terakhir, didukung perbaikan optimizer seperti join reordering, common-subplan-elimination yang lebih baik, serta dynamic predicates dan bloom filter.
Untuk membuktikan klaimnya, tim Polars menjalankan benchmark TPC-H dan TPC-DS melawan DuckDB 1.5.6, DuckDB 2.0 alpha, dan DataFusion 54.0.0. Pengujiannya memakai dua mesin, yaitu c7a.4xlarge dengan 16 vCPU dan c7a.metal dengan 192 vCPU. Hasilnya, Polars menjadi yang tercepat di hampir semua benchmark menurut pengumuman mereka.

Yang patut diapresiasi, mereka juga jujur soal kelemahannya. Polars punya overhead konstan saat diskalakan ke 192 thread sehingga kalah di query data kecil, dan DataFusion tercatat timeout serta kehabisan memori di beberapa query. Mereka bahkan membagikan repositori benchmark agar hasilnya bisa direplikasi siapa pun.
Tipe Data Map Baru dan Aturan yang Lebih Ketat
Rilis ini memperkenalkan tipe data `Map`, yang bisa kamu bayangkan seperti dictionary di Python: pasangan key dan value dalam satu kolom. Sebelum 2.0, tipe Map dari Arrow dibaca sebagai struktur list yang canggung. Kini ia punya ekspresi khusus seperti `get`, `contains_key`, `keys`, `values`, dan `len`.
Di sisi lain, Polars 2.0 menjadi lebih ketat dan tidak segan memutus kompatibilitas. Fungsi `melt()` yang lama dihapus dan diganti `unpivot()`. Method `is_in()` kini menolak konversi tipe yang berisiko kehilangan data. Ada juga exception baru bernama `AttributeRemovedError` dan `ArgumentRemovedError` yang menunjuk langsung ke API pengganti.
Filosofinya adalah gagal cepat di awal, bukan 20 menit setelah pipeline berjalan. Ketegasan ini juga berguna di era AI coding agent. Agent bisa memvalidasi struktur query lebih awal lewat `collect_schema()` tanpa mematerialisasi data, sehingga iterasi jadi jauh lebih cepat.
Polars 2.0 menegaskan bahwa persaingan library data sudah naik kelas. Bukan lagi sekadar siapa yang tercepat di benchmark sintetis, tapi siapa yang paling tangguh menghadapi data nyata, paling jujur soal keterbatasan, dan paling mudah diajak kerja sama oleh AI agent.
Kalau kamu penasaran bereksperimen dengan pola seperti ini, halaman /projects berisi arsip eksperimen dan proyek yang pernah saya kerjakan. Siapa tahu ada ide pipeline data yang bisa kamu coba dengan Polars 2.0 akhir pekan ini.

Dimas Febriyanto
Fullstack & Mobile Developer specializing in Golang & Flutter. Aktif sebagai Junior Mobile Developer di Sagara Technology & asisten lab di Universitas Gunadarma. Passionate about building scalable algorithms & high-impact applications.
Lihat Portofolio