- pg_lake, Postgres tabanlı olarak Iceberg tablolarını ve veri gölü dosyalarını doğrudan entegre eden, işlemler ve yüksek hızlı sorguları destekleyen bir uzantıdır
- S3 gibi nesne depolamadaki Parquet, CSV, JSON ve Iceberg dosyalarını doğrudan sorgulama·içe aktarma·dışa aktarma imkanı sunar
- İçeride DuckDB sorgu motorunu kullanarak Postgres ortamında hızlı yürütme performansı sağlar
- Iceberg tablosu oluşturma, harici dosyalar için otomatik şema çıkarımı, COPY komutu üzerinden S3 giriş/çıkışı gibi veri lakehouse işlevlerini tek bir SQL arayüzüyle sunar
- Snowflake, 2025'te Crunchy Data'yı satın aldıktan sonra bunu açık kaynak olarak yayımladı; bu da Postgres ekosisteminde veri gölü entegrasyonunu genişleten bir temel oluşturuyor
pg_lake genel bakış
- pg_lake, Iceberg ve veri gölü dosyalarını Postgres'e entegre eden bir uzantıdır; böylece Postgres bağımsız bir lakehouse sistemi olarak kullanılabilir
- Iceberg tabloları için işlem garantisi ve hızlı sorgu desteği
- S3 gibi nesne depolamadaki ham veri dosyalarına doğrudan erişim
- Başlıca özellikler
- Iceberg tabloları oluşturma·değiştirme ve diğer motorlardan sorgulayabilme
- Parquet, CSV, JSON ve Iceberg biçimlerindeki veri dosyalarını sorgulama ve içe aktarma
- COPY komutuyla sorgu sonuçlarını Parquet, CSV ve JSON biçimlerinde nesne depolamaya dışa aktarma
- GDAL'ın desteklediği GeoJSON, Shapefile gibi coğrafi veri biçimlerini okuma
- Yarı yapılandırılmış veriler için yerleşik
map türü sağlama
- heap, Iceberg ve harici dosyaları tek bir SQL sorgusunda birleştirebilme
- Harici veri kaynaklarından kolonları ve türleri otomatik çıkarma
- DuckDB motoru üzerinden yüksek hızlı yürütme
Kurulum ve yapılandırma
Kullanım örnekleri
- Iceberg tablosu oluşturma
CREATE TABLE iceberg_test USING iceberg AS
SELECT i as key, 'val_'|| i as val FROM generate_series(0,99)i;
- Oluşturduktan sonra
SELECT count(*) FROM iceberg_test; sonucu 100 olur
- Iceberg metadata konumu doğrulanabilir
- S3'e COPY giriş/çıkışı
COPY (SELECT * FROM iceberg_test) TO 's3://.../iceberg_test.parquet';
COPY iceberg_test FROM 's3://.../iceberg_test.parquet';
- Parquet, CSV ve JSON biçimleri desteklenir
- S3 dosyasını harici tablo olarak oluşturma
CREATE FOREIGN TABLE parquet_table()
SERVER pg_lake
OPTIONS (path 's3://.../*.parquet');
- Kolonlar otomatik çıkarılır ve sorgulanabilir (
SELECT count(*) FROM parquet_table; → 100)
Mimari
- Bileşenler
- PostgreSQL + pg_lake uzantısı
- pgduck_server (DuckDB yürütme ve Postgres protokolü uygulaması)
- Çalışma şekli
- Kullanıcılar Postgres'e bağlanıp SQL çalıştırır
- Sorguların bir kısmı DuckDB üzerinden paralel ve kolon odaklı şekilde yürütülür
- DuckDB, Postgres süreci içine gömülmediği için thread ve bellek güvenliği sorunlarından kaçınılır
- Standart Postgres istemcileri üzerinden DuckDB motoruna doğrudan erişilebilir
Bileşenlerin ayrıntılı listesi
- pg_lake_iceberg: Iceberg spesifikasyonunun uygulanması
- pg_lake_table: nesne depolama dosyaları için FDW uygulaması
- pg_lake_copy: veri gölüne COPY giriş/çıkış desteği
- pg_lake_engine: ortak modül
- pg_extension_base: diğer uzantılar için temel bileşen
- pg_extension_updater: uzantı otomatik güncelleme özelliği
- pg_lake_benchmark: lake table benchmark çalıştırma
- pg_map: genelleştirilmiş
map türü üreticisi
- pgduck_server: DuckDB'yi yükleyip Postgres protokolüyle açığa çıkaran sunucu
- duckdb_pglake: DuckDB'ye Postgres uyumlu işlevler ekler
Geliştirme ve yayımlanma geçmişi
- 2024 başında Crunchy Data, Iceberg'i Postgres'e getirmek için geliştirmeye başladı
- İlk aşamada DuckDB entegrasyonu ve Crunchy Bridge müşterilerine yönelik özellikler sağlandı
- Sonrasında Iceberg v2 protokolü ve işlem desteği uygulandı
- 2024 Kasım'da Crunchy Data Warehouse olarak yeniden piyasaya sürüldü
- 2025 Haziran'da Snowflake, Crunchy Data'yı satın aldı, 2025 Kasım'da ise pg_lake açık kaynak olarak yayımlandı
- İlk sürüm 3.0'dır (önceki iki nesil dahil)
- Mevcut Crunchy Data Warehouse kullanıcıları için otomatik yükseltme yolu sağlandı
Lisans ve bağımlılıklar
- Apache 2.0 lisansı
- Apache Avro ve DuckDB projelerine bağımlıdır
- Derleme sırasında Avro ve DuckDB uzantılarına patch uygulanır
1 yorum
Hacker News görüşleri
Böylece karmaşıklık azaltılabilir. Gereken tek şey DuckDB ve PostgreSQL(pg_duckdb)
Bu arada Prof. Hannes Mühleisen'in sunum videosu da var: DuckLake - The SQL-Powered Lakehouse Format for the Rest of Us
DuckLake, Iceberg tabanlı pg_lake'in yapamadığı şeyleri yapabiliyor; tersine, Postgres de DuckDB'nin yapamadığı şeyleri yapabiliyor. Örneğin saniyede 100 binden fazla tek satırlık eklemeyi işleyebiliyor
İşlem yönetimi bedavaya gelmiyor. Motoru kataloğun içine koymak yerine kataloğu motorun içine koyarsanız, analitik ve operasyonel tablolar arasında işlem yapmak mümkün hale geliyor
Postgres, kalıcılık ve sürekli işleme açısından da daha doğal. pg_cron ve PL/pgSQL ile orkestrasyon kurulabiliyor
Ayrıca Iceberg'in bir diğer güçlü yanı da birden fazla sorgu motoruyla birlikte çalışabilmesi
Bunun benim veri yazma desenimden mi kaynaklandığından (Polars DataFrame'den Ducklake tablosuna ekleme), yoksa bölümlemeli tablo yapısından mı emin değilim
Geliştirme/test ortamında idare ediyordu ama ekip genelinde sorun oldu. Bu yüzden sonunda Hive bölümlemeli Parquet dosyaları ve DuckDB görünümleri kombinasyonuna geri döndük
Daha sonra örneklerle bir issue açmayı düşünüyorum ama şu an başka işlerden dolayı zamanım yok
Eskiden Postgres pazarında “açık kaynak Snowflake” olmadığını söylerdik
Crunchy'nin Postgres eklentisi şu anda piyasadaki en ileri çözüm. Snowflake'i ve Crunchy ekibini bunu açık kaynak yapmaları için tebrik ederim
Linux'ta dosya sistemi üzerinden sistem ayarlarını okuyup yazabilirsiniz (
cat /sys/...,echo ... > /sys/...)FUSE ile kullanıcı alanında dosya sistemi sürücüsünü kendiniz uygulayabilirsiniz. Örneğin SSH veya Google Drive'ı bağlayıp
cpkomutuyla kopyalama yapabilirsinizAma dosya sistemleri yalnızca hiyerarşik verilere uygun. Gerçek dünyadaki verilerin çoğu ise ilişkisel yapıdadır
Veri gölleri, SQL gibi zarif bir soyutlama sayesinde farklı veri kaynaklarını tek bir ilişkisel veritabanı gibi ele almayı sağlar
Sonuçta birçok uygulama CRUD odaklıdır, dolayısıyla bu yaklaşım çok daha verimlidir
Bu durumda Postgres'in sınırları var. Daha fazla CPU ve RAM gerekiyor ve sonunda dağıtık bir motor gerekiyor
İşlem katmanı Postgres'e “bu anahtarların güncel verisi nedir?” ya da “2 hafta önceki verisi neydi?” diye sorar; asıl analiz sorguları ise doğrudan Parquet dosyaları üzerinde çalışır
Bunu yerel Docker'da çalıştırabilmek güzel ama AWS üzerinde Snowflake hesabıyla entegre faturalandırma şeklinde yönetilebilse daha da iyi olurdu
Parquet verisini Postgres'e alıp sorgulayabilir ve mevcut tablolarla join da yapabilirsiniz
(1) Iceberg yerine Ducklake spesifikasyonunu kullanacak bir uyumluluk planı var mı? Ducklake, kataloğu dosyalar yerine SQL tablolarında tuttuğu için eşzamanlı yazma ve anlık görüntü yönetimi daha kolay
(2) pg_duckdb zamanla aynı işlevi sunacak hale gelebilir mi?
Ancak satır içi veri işleme gibi ek karmaşıklıklar var. Bunları çözersek yüksek işlem performansı elde edebiliriz
(2) pg_duckdb, Ducklake uygulamasını yeniden kullanma açısından daha kolay olabilir ama kaynak yönetimi ve kararlılık bakımından bu yapının daha az uygun olduğunu düşünüyoruz
CLI, YAML ve Python ile ETL işleri çalıştırabilirsiniz