3 poin oleh GN⁺ 2025-11-05 | 1 komentar | Bagikan ke WhatsApp
  • pg_lake adalah ekstensi berbasis Postgres yang mengintegrasikan tabel Iceberg dan file data lake secara langsung, mendukung transaksi dan kueri berkecepatan tinggi
  • Dapat langsung menanyakan, mengimpor, dan mengekspor file Parquet, CSV, JSON, dan Iceberg di object storage seperti S3
  • Memanfaatkan mesin kueri DuckDB secara internal untuk memastikan performa eksekusi cepat di dalam lingkungan Postgres
  • Menyediakan fitur lakehouse data melalui satu antarmuka SQL, seperti pembuatan tabel Iceberg, inferensi skema otomatis untuk file eksternal, dan I/O S3 melalui perintah COPY
  • Setelah Snowflake mengakuisisi Crunchy Data pada 2025, proyek ini dirilis sebagai open source, menjadi fondasi untuk memperluas integrasi data lake di ekosistem Postgres

Ikhtisar pg_lake

  • pg_lake adalah ekstensi yang mengintegrasikan file Iceberg dan data lake ke Postgres, sehingga Postgres dapat digunakan sebagai sistem lakehouse mandiri
    • Menjamin transaksi untuk tabel Iceberg dan mendukung kueri cepat
    • Dapat mengakses langsung file data mentah di object storage seperti S3
  • Fitur utama
    • Membuat dan memodifikasi tabel Iceberg serta dapat dikueri dari mesin lain
    • Menanyakan dan mengimpor file data berformat Parquet, CSV, JSON, dan Iceberg
    • Mengekspor hasil kueri ke object storage dalam format Parquet, CSV, dan JSON melalui perintah COPY
    • Membaca format data geospasial seperti GeoJSON dan Shapefile yang didukung GDAL
    • Menyediakan tipe map bawaan untuk data semi-terstruktur
    • Dapat menggabungkan heap, Iceberg, dan file eksternal dalam satu kueri SQL
    • Inferensi otomatis kolom dan tipe dari sumber data eksternal
    • Eksekusi cepat melalui mesin DuckDB

Instalasi dan konfigurasi

  • Cara instalasi
    • Menjalankan dengan mudah menggunakan Docker
    • Instalasi manual atau penyiapan lingkungan pengembangan melalui build dari source
  • Contoh pembuatan ekstensi
    CREATE EXTENSION pg_lake CASCADE;  
    
    • Ekstensi terkait: pg_lake_table, pg_lake_engine, pg_extension_base, pg_lake_iceberg, pg_lake_copy
    Iklan
  • pgduck_server
    • Proses independen yang mengimplementasikan wire protocol Postgres dan secara internal menggunakan DuckDB
    • Berjalan pada port default 5332 dan dapat diakses langsung dengan psql
    • Pengaturan utama
      • --memory_limit: batas memori (default 80% dari memori sistem)
      • --init_file_path: menentukan file SQL yang dijalankan saat startup
      • --cache_dir: menentukan direktori cache file jarak jauh
  • Konfigurasi koneksi S3
    • Menggunakan secrets manager DuckDB untuk mengenali kredensial AWS/GCP secara otomatis
    • Contoh penentuan lokasi penyimpanan tabel Iceberg
      SET pg_lake_iceberg.default_location_prefix TO 's3://testbucketpglake';  
      

Contoh penggunaan

  • Membuat tabel Iceberg
    CREATE TABLE iceberg_test USING iceberg AS   
    SELECT i as key, 'val_'|| i as val FROM generate_series(0,99)i;  
    
    • Setelah dibuat, hasil SELECT count(*) FROM iceberg_test; adalah 100
    • Lokasi metadata Iceberg dapat diperiksa
    Iklan
  • COPY I/O ke dan dari S3
    COPY (SELECT * FROM iceberg_test) TO 's3://.../iceberg_test.parquet';  
    COPY iceberg_test FROM 's3://.../iceberg_test.parquet';  
    
    • Mendukung format Parquet, CSV, dan JSON
  • Membuat file S3 sebagai tabel eksternal
    CREATE FOREIGN TABLE parquet_table()   
    SERVER pg_lake   
    OPTIONS (path 's3://.../*.parquet');  
    
    • Kolom diinferensikan secara otomatis dan dapat dikueri (SELECT count(*) FROM parquet_table; → 100)

Arsitektur

  • Komponen
    • PostgreSQL + ekstensi pg_lake
    • pgduck_server (menjalankan DuckDB dan mengimplementasikan protokol Postgres)
    Iklan
  • Cara kerja
    • Pengguna terhubung ke Postgres dan menjalankan SQL
    • Sebagian kueri dijalankan melalui DuckDB dengan pendekatan paralel dan berorientasi kolom
    • DuckDB tidak di-embed ke dalam proses Postgres, sehingga menghindari masalah keamanan thread dan memori
    • Mesin DuckDB dapat diakses langsung melalui klien Postgres standar

Daftar detail komponen

  • pg_lake_iceberg: implementasi spesifikasi Iceberg
  • pg_lake_table: implementasi FDW untuk file di object storage
  • pg_lake_copy: mendukung COPY I/O ke dan dari data lake
  • pg_lake_engine: modul umum
  • pg_extension_base: komponen dasar untuk ekstensi lain
  • pg_extension_updater: fitur pembaruan otomatis ekstensi
  • pg_lake_benchmark: menjalankan benchmark tabel lake
  • pg_map: generator tipe map yang digeneralisasi
  • pgduck_server: server yang memuat DuckDB dan mengeksposnya melalui protokol Postgres
  • duckdb_pglake: menambahkan fungsi kompatibel Postgres ke DuckDB

Riwayat pengembangan dan rilis

  • Pengembangan dimulai pada awal 2024 di Crunchy Data untuk menghadirkan Iceberg ke Postgres
  • Awalnya fokus pada integrasi DuckDB dan penyediaan fitur bagi pelanggan Crunchy Bridge
  • Setelah itu diimplementasikan dukungan protokol Iceberg v2 dan transaksi
  • Diluncurkan kembali pada November 2024 sebagai Crunchy Data Warehouse
  • Pada Juni 2025, Snowflake mengakuisisi Crunchy Data, lalu pada November 2025 pg_lake dirilis sebagai open source
    • Versi awalnya adalah 3.0 (termasuk dua generasi sebelumnya)
    • Pengguna Crunchy Data Warehouse yang ada mendapatkan jalur upgrade otomatis

Lisensi dan dependensi

  • Lisensi Apache 2.0
  • Bergantung pada proyek Apache Avro dan DuckDB
    • Patch diterapkan ke ekstensi Avro dan DuckDB saat build

1 komentar

 
GN⁺ 2025-11-05
Komentar Hacker News
  • Saya jadi berpikir apakah ada alasan untuk tidak memakai Ducklake saja
    Dengan begitu, kompleksitas bisa dikurangi. Yang dibutuhkan hanya DuckDB dan PostgreSQL (pg_duckdb)
    Sebagai referensi, ada juga video presentasi Prof. Hannes Mühleisen, DuckLake - The SQL-Powered Lakehouse Format for the Rest of Us
    • DuckLake adalah proyek yang cukup keren. Tim kami juga menyukai DuckDB. Sebenarnya, pg_lake bisa terwujud juga berkat DuckDB
      DuckLake bisa melakukan hal-hal yang tidak bisa dilakukan pg_lake berbasis Iceberg, dan sebaliknya Postgres bisa melakukan hal-hal yang tidak bisa dilakukan DuckDB. Misalnya, dapat menangani lebih dari 100 ribu insert baris tunggal per detik
      Pemrosesan transaksi tidak datang gratis. Alih-alih menaruh engine di dalam katalog, jika katalog ditaruh di dalam engine maka transaksi antara tabel analitik dan tabel operasional menjadi mungkin
      Postgres juga terasa alami dari sisi persistensi dan pemrosesan berkelanjutan. Orkestrasi dapat dibangun dengan pg_cron dan PL/pgSQL
      Selain itu, Iceberg juga unggul dalam interoperabilitas dengan berbagai query engine
    • Pada akhirnya ini soal keputusan desain. Diskusi terkait bisa dilihat di thread ini
    • Saya juga benar-benar berusaha untuk menyukai Ducklake, tetapi saat dipakai nyata ada masalah pemeliharaan. Khususnya terkait pg catalog, ada kasus di mana Ducklake melempar error HTTP 400 untuk file yang dibuatnya sendiri
      Saya tidak yakin apakah ini karena pola penulisan data saya (insert dari Polars DataFrame ke tabel Ducklake), atau karena struktur tabel partisi
      Di lingkungan pengembangan/pengujian masih oke, tetapi untuk seluruh tim ada kesulitan. Jadi akhirnya kembali ke kombinasi file Parquet berpartisi Hive dan view DuckDB
      Nanti saya berniat mengunggah contoh sebagai issue, tetapi saat ini saya kekurangan waktu karena pekerjaan lain
  • Ini benar-benar perubahan besar
    Dulu orang sering bilang tidak ada “Snowflake open source” di pasar Postgres
    Ekstensi Postgres dari Crunchy adalah solusi paling maju di pasar saat ini. Selamat kepada Snowflake dan tim Crunchy yang telah merilisnya sebagai open source
    • Sejujurnya, saya rasa lebih baik bayar saja Snowflake dan memanfaatkan DB hebat itu beserta ekosistemnya. Jika infrastruktur bukan inti nilai bagi pelanggan, lebih baik serahkan bagian itu dan fokus membuat hal-hal keren
  • Saya suka data lake dan bahasa kueri mirip SQL. Rasanya seperti bentuk evolusi dari filosofi “everything is a file”
    Di Linux, kita bisa membaca dan menulis konfigurasi sistem lewat file system (cat /sys/..., echo ... > /sys/...)
    Dengan FUSE, kita bahkan bisa mengimplementasikan driver file system langsung di user space. Misalnya me-mount SSH atau Google Drive lalu menyalin dengan perintah cp
    Namun file system hanya cocok untuk data hierarkis. Sebagian besar data dunia nyata punya struktur relasional
    Data lake memungkinkan berbagai sumber data diperlakukan seperti satu database relasional melalui abstraksi elegan bernama SQL
    Pada akhirnya banyak aplikasi berpusat pada CRUD, jadi pendekatan seperti ini jauh lebih efisien
  • Bagaimana Anda memakai data lake? Bagi saya, ini bukan sekadar penyimpanan, melainkan ruang untuk pekerjaan analitik yang tak terduga
    Dalam kasus seperti itu, Postgres punya batas. Dibutuhkan lebih banyak CPU dan RAM, dan pada akhirnya perlu engine terdistribusi
    • Inti dari data lake adalah pemisahan compute dan storage. Postgres bukan lapisan compute, melainkan lapisan akses
      Compute bertanya ke Postgres “apa data saat ini untuk key-key ini?” atau “apa datanya dua minggu lalu?”, lalu kueri analitik yang sebenarnya dijalankan langsung pada file Parquet
  • Saat Snowflake mengakuisisi Crunchy Data, saya berharap mereka menyediakan versi terkelola seperti ini
    Menjalankannya secara lokal dengan Docker memang bagus, tetapi akan lebih baik jika bisa dioperasikan di AWS dengan penagihan terintegrasi ke akun Snowflake
  • Sekarang rasanya benar-benar zaman keemasan PostgreSQL
  • Saya bukan data engineer, tetapi bekerja di bidang terkait. Adakah yang bisa menjelaskan dengan mudah masalah apa yang diselesaikan ini?
    • Misalnya ada layanan yang menumpuk data log sebagai file Parquet di S3. Jika Anda ingin mengueri data ini langsung dari Postgres, pg_lake berguna
      Data Parquet bisa dibawa ke Postgres untuk dikueri, dan juga bisa di-join dengan tabel yang sudah ada
  • Ada dua pertanyaan
    (1) Apakah ada rencana kompatibilitas agar memakai spesifikasi Ducklake alih-alih Iceberg? Ducklake mengelola katalog sebagai tabel SQL, bukan file, sehingga penulisan serentak dan pengelolaan snapshot lebih sederhana
    (2) Apakah mungkin pg_duckdb pada akhirnya akan memiliki fungsi yang sama?
    • (1) Sudah dipertimbangkan, tetapi saat ini belum ada rencana. Daripada memakai Ducklake apa adanya, kami ingin mengimplementasikannya langsung di dalam Postgres agar batas transaksi tetap terjaga
      Namun ada kompleksitas seperti pemrosesan data inline. Jika itu bisa diatasi, performa transaksi tinggi bisa dicapai
      (2) pg_duckdb memang lebih mudah untuk memakai ulang implementasi Ducklake, tetapi dari sisi pengelolaan resource dan stabilitas, menurut saya strukturnya kurang cocok
  • Melihat S3 Table Buckets, Cloudflare R2 Data Catalog, dan proyek ini, rasanya Iceberg sedang menang
  • Jika Anda ingin memuat data dengan mudah ke DB yang kompatibel dengan Postgres Wire, saya merekomendasikan sling-cli
    Anda bisa menjalankan pekerjaan ETL lewat CLI, YAML, dan Python