Lakehouse-Formate
Lakehouse-Formate, oft auch offene Tabellenformate genannt, sind Spezifikationen zum Speichern von Daten in Objektspeichern bei gleichzeitigem Einhalten bestimmter Garantien wie ACID-Transaktionen oder Snapshot-Historie. Im Lauf der Zeit sind mehrere Lakehouse-Formate entstanden, jedes mit einem eigenen Ansatz zur Verwaltung seiner Metadaten (auch Katalog genannt). Auf dieser Seite behandeln wir die Unterstützung, die DuckDB für einige dieser Formate bietet, sowie Workarounds, mit denen Sie DuckDB nutzen und trotzdem nahe an volle Interoperabilität mit diesen Formaten kommen.
DuckDB-Lakehouse-Unterstützungsmatrix
DuckDB unterstützt Iceberg, Delta, Lance und DuckLake nativ. Die folgende Matrix zeigt, was DuckDB über Kern-Erweiterungen von Haus aus nativ unterstützt.
| DuckLake | Iceberg | Delta | Lance | |
|---|---|---|---|---|
| Erweiterung | ducklake |
iceberg |
delta |
lance |
| Lesen | ✅ | ✅ | ✅ | ✅ |
| Schreiben | ✅ | ✅ | ✅ | ✅ |
| Löschen | ✅ | ✅ | ❌ | ✅ |
| Aktualisieren | ✅ | ✅ | ❌ | ✅ |
| Upsert | ✅ | ✅ | ❌ | ✅ |
| Tabelle anlegen | ✅ | ✅ | ❌ | ✅ |
| Tabelle mit Partitionen anlegen | ✅ | ✅ | ❌ | ❌ |
| An einen Katalog anhängen | ✅ | ✅ | ✅ * | ✅ |
| Tabelle umbenennen | ✅ | ✅ | ❌ | ❌ |
| Spalten umbenennen | ✅ | ✅ | ❌ | ✅ |
| Spalten hinzufügen/entfernen | ✅ | ✅ | ❌ | ✅ |
| Spaltentyp ändern | ✅ | ✅ | ❌ | ✅ |
| Kompaktierung und Wartung | ✅ | ❌ | ❌ | ✅ |
| Verschlüsselung | ✅ | ❌ | ❌ | ❌ |
| Tabelleneigenschaften verwalten | ✅ | ✅ | ❌ | ❌ |
| Time Travel | ✅ | ✅ | ✅ | ❌ |
| Tabellenänderungen abfragen | ✅ | ❌ | ❌ | ❌ |
* Über die Erweiterung unity_catalog.
DuckDB zielt darauf ab, native Erweiterungen mit möglichst wenigen Abhängigkeiten zu bauen. Die Erweiterung iceberg hat beispielsweise keine Abhängigkeiten von Iceberg-Bibliotheken Dritter; alle Daten- und Metadatenoperationen sind nativ in der DuckDB-Erweiterung implementiert. Für die Erweiterung delta nutzen wir das Projekt delta-kernel-rs, das als leichtgewichtige Plattform gedacht ist, damit Engines Delta-Integrationen möglichst nah an einer nativen Implementierung aufbauen können.
Warum sind native Implementierungen wichtig? Native Implementierungen ermöglichen DuckDB mehr Leistungsoptimierungen, etwa komplexe Filter-Pushdowns (mit Pruning auf Datei- und Zeilengruppenebene) und eine bessere Speicherverwaltung.