2025-12-16
Iceberg im Browser
Carlo Piovesan, Tom Ebergen, Gábor Szárnyas
In diesem Beitrag beschreiben wir die gängigen Muster für die Interaktion mit Iceberg Catalogs und stellen die Frage: Geht das auch aus einem Browser? Nach den nötigen Änderungen im DuckDB-Ökosystem zeigen wir unseren Ansatz zur Interaktion mit einem Iceberg REST Catalog. Nur Browser, kein Extra-Setup.
Interaktionsmodelle für Iceberg Catalogs
Iceberg ist ein offenes Tabellenformat, mit dem sich eine veränderbare Datenbanktabelle als Menge statischer Dateien auf Object Storage (etwa AWS S3) abbilden lässt. Iceberg Catalogs erlauben es, Iceberg-Tabellen zu verfolgen und zu organisieren. Iceberg REST Catalogs zum Beispiel bieten diese Funktionen über eine REST-API.
Es gibt zwei gängige Wege, mit Iceberg Catalogs zu interagieren:
- Das Client-Server-Modell, bei dem der Compute-Teil an eine verwaltete Infrastruktur (etwa die Cloud) delegiert wird. Nutzerinnen und Nutzer interagieren mit dem Server über einen lokalen Client oder einen leichten Client wie den Browser.
- Das Client-ist-der-Server-Modell, bei dem zuerst die relevanten Bibliotheken installiert und dann Abfragen direkt auf der eigenen Maschine ausgeführt werden.
Iceberg-Engines folgen diesen Interaktionsmodellen: Sie laufen entweder nativ in verwalteter Compute-Infrastruktur oder lokal beim Nutzer. Schauen wir, wie das mit DuckDB aussieht!
Iceberg mit DuckDB
DuckDB unterstützt beide Iceberg-Interaktionsmodelle. Im Client-Server-Modell läuft DuckDB auf dem Server, um die Iceberg-Datensätze zu lesen. Aus Nutzersicht ist die Wahl der Engine transparent, und DuckDB ist nur eine von vielen Engines, die der Server im Hintergrund nutzen könnte. Das Client-ist-der-Server-Modell ist interessanter: Hier installiert man lokal einen DuckDB-Client und nutzt ihn über seine SQL-Schnittstelle, um Iceberg Catalogs abzufragen. Zum Beispiel:
CREATE SECRET test_secret ( TYPE S3, KEY_ID '⟨AKIAIOSFODNN7EXAMPLE⟩', SECRET '⟨wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY⟩');
ATTACH '⟨warehouse⟩' AS db ( TYPE ICEBERG, ENDPOINT_URL '⟨https://your-iceberg-endpoint⟩',);
SELECT sum(value)FROM db.tableWHERE other_column = '⟨some_value⟩';Das Client-ist-der-Server-Modell ermöglicht empowered Clients, die direkt auf den Daten arbeiten.
Den vollen Funktionsumfang der DuckDB-Iceberg-Erweiterung einschließlich Insert- und Update-Fähigkeiten finden Sie in unserem früheren Blogbeitrag.
Iceberg mit DuckDB im Browser
Eine lokale DuckDB-Installation aufzusetzen ist schon einfach, einen Browser-Tab zu öffnen noch schneller. Deshalb haben wir uns gefragt: Können wir das Client-ist-der-Server-Modell direkt in einem Browser-Tab unterstützen? Das wäre eine Zero-Setup-, keine-Infrastruktur-, richtig serverless Option für die Interaktion mit Iceberg Catalogs.
Glücklicherweise hat DuckDB einen Client, der in jedem Browser läuft! DuckDB-Wasm ist ein WebAssembly-Port von DuckDB, der das Laden von Extensions unterstützt.
Die Interaktion mit einem Iceberg REST Catalog braucht mehrere Fähigkeiten: mit einer REST-API über HTTP(S) sprechen, avro- und parquet-Dateien auf Object Storage lesen und schreiben, und Authentifizierung aushandeln, um im Namen des Nutzers auf diese Ressourcen zuzugreifen. All das muss im Browser geschehen, ohne native Komponenten aufzurufen.
Um das zu unterstützen, haben wir folgende übergeordnete Änderungen umgesetzt:
- Im Kern-
duckdb-Codebase haben wir HTTP-Interaktionen neu gestaltet, sodass Extensions und Clients eine einheitliche Schnittstelle zum Networking-Stack haben. (PR) - In
duckdb-wasmhaben wir eine solche Schnittstelle implementiert, hier ein Wrapper um den verfügbaren JavaScript-Netzwerkstack. (PR) - In
duckdb-iceberghaben wir das gesamte Networking über die gemeinsame HTTP-Schnittstelle geleitet, sodass natives DuckDB und DuckDB-Wasm dieselbe Logik ausführen. (PR)
Das Ergebnis: Sie können Iceberg jetzt mit DuckDB direkt im Browser abfragen! Derselbe Iceberg Catalog ist jetzt über Client-Server, Client-ist-der-Server oder richtig serverless in der Isolation eines Browser-Tabs erreichbar!
Willkommen bei Serverless Iceberg Analytics
Schauen Sie sich unsere Demo von Serverless Iceberg Analytics mit dem DuckDB Table Visualizer{:.button.yellow} an
Die aktuellen Credentials in der Demo kommen von einem Wegwerf-Account mit minimalen Rechten. Wenn Sie eigene Credentials eingeben und einen Link teilen, teilen Sie Ihre Credentials.
Zugriff auf Ihre eigenen Daten
Wenn Sie Ihre eigene S3-Tables-Bucket-ARN und Credentials mit der Policy AmazonS3TablesReadOnlyAccess einsetzen, können Sie auch auf Ihren Catalog, Metadaten und Daten zugreifen.
Berechnungen laufen vollständig lokal, und Credentials sowie Warehouse-ID werden nur an den Catalog-Endpunkt geschickt, den Sie in Ihrem ATTACH-Befehl angeben.
Eingaben werden nach SQL übersetzt und im Hash-Segment der URL abgelegt.
Das bedeutet:
- keine sensiblen Daten werden von
duckdb.orgverarbeitet oder dorthin geschickt - Berechnungen laufen lokal, vollständig in Ihrem Browser
- Sie nutzen die vertraute SQL-Schnittstelle mit denselben Code-Snippets, die überall laufen, wo DuckDB läuft
- wenn Sie die Credentials ändern und den resultierenden Link teilen, teilen Sie die neuen Credentials
Stand heute funktioniert das mit Amazon S3 Tables. Umgesetzt in Zusammenarbeit mit dem Amazon-S3-Tables-Team. Mehr zu S3 Tables, Einstieg und Funktionsumfang finden Sie auf der Produktseite oder in der Dokumentation. Eine Demo von DuckDB, das S3 Tables aus dem Browser abfragt, wurde auf der AWS re:Invent 2025 gezeigt – siehe den Vortrag.
Fazit
Die DuckDB-Iceberg-Erweiterung wird jetzt in DuckDB-Wasm unterstützt und kann Iceberg REST Catalogs lesen und bearbeiten. Nutzerinnen und Nutzer können jetzt aus dem Browser auf Iceberg-Daten zugreifen, ohne Compute-Knoten zu installieren oder zu verwalten!
Feedback oder Issues bitte im Repository DuckDB-Wasm oder DuckDB-Iceberg. Wenn Sie Teile davon in Ihrer Organisation nutzen möchten, melden Sie sich gern.