3 poin oleh GN⁺ 2025-11-05 | Belum ada 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
  • 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
  • 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)
  • 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

Belum ada komentar.

Belum ada komentar.