- DuckDB ist eine Open-Source-SQL-Engine, mit der sich große tabellarische Daten auf einer einzelnen Maschine schnell und einfach verarbeiten lassen, und wird in letzter Zeit im Data Engineering breit eingesetzt.
- Die Installation ist einfach, es gibt keine Abhängigkeiten, und die Engine lässt sich in einer Python-Umgebung sofort ausführen, wodurch sie sich gut für CI und Testautomatisierung eignet.
- Dank Optimierung für analytische Abfragen ist die Performance im Vergleich zu SQLite oder Postgres um bis zu das 1.000-Fache höher, und verschiedene Dateiformate (
csv, parquet, json) können direkt abgefragt werden.
- Mit benutzerfreundlicher SQL-Syntax (
EXCLUDE, COLUMNS, QUALIFY, Function Chaining usw.) und einer Python-API lassen sich komplexe Pipelines effizient entwickeln.
- Mit ACID-Konformität, Hochleistungs-UDFs und PostgreSQL-Integrations-Erweiterungen entwickelt sich DuckDB zu einer Lakehouse-Alternative für Daten im mittleren Maßstab.
Überblick über DuckDB
- DuckDB ist eine In-Process-SQL-Engine mit Fokus auf die Optimierung analytischer Abfragen.
- Sie läuft ohne separaten Server innerhalb der Anwendung und benötigt keinen externen Dienst wie Postgres.
- Sie ist auf umfangreiche Join- und Aggregationsoperationen spezialisiert und bietet im Vergleich zu transaktionsorientierten Engines (OLTP) eine 100- bis 1.000-fach höhere Performance.
- Ein zentraler Anwendungsfall ist die Batch-Verarbeitung großer Dateien wie
csv, parquet und json, die direkt von der Festplatte eingelesen werden.
- Sie kann auch für leichtgewichtige Datenexploration genutzt werden, etwa um CSV-Dateien einfach über die Kommandozeile abzufragen.
Hauptmerkmale
-
Geschwindigkeit
- DuckDB gehört zu den schnellsten Open-Source-Engines für Datenverarbeitung und liegt in Benchmarks regelmäßig weit vorne.
- Im Vergleich mit Polars, DataFusion, Spark und Dask ist DuckDB bei kleineren Datenmengen im Vorteil, während Spark und Dask bei sehr großen Datenmengen konkurrenzfähig sind.
-
Einfache Installation und keine Abhängigkeiten
- DuckDB wird als einzelne vorkompilierte Binärdatei bereitgestellt und kann in Python sofort mit
pip install duckdb installiert werden.
- Durch die Abwesenheit von Abhängigkeiten ist die Installation im Vergleich zu großen Frameworks wie Spark sehr einfach.
- In Kombination mit
uv lässt sich eine Python-Umgebung in weniger als einer Sekunde einrichten.
-
CI und Tests
- Dank schneller Startzeit und geringem Gewicht eignet sich DuckDB gut für CI- und Testumgebungen von Datenpipelines.
- Frühere Spark-basierte Tests waren langsam und komplex, während DuckDB die Umgebungskonfiguration vereinfacht und Konsistenz mit der Produktion leichter aufrechterhalten lässt.
-
Erfahrung beim Schreiben von SQL
- Mit DuckDB lassen sich SQL-Abfragen schnell schreiben und syntaktisch prüfen.
- Gegenüber dem lokalen Spark-Modus oder AWS Athena ist es für sofortige Ausführung und iterative Entwicklung vorteilhafter.
- Es bietet eine UI mit Autovervollständigung.
-
Benutzerfreundliche SQL-Syntax
- DuckDB enthält zahlreiche benutzerfreundliche SQL-Erweiterungen.
- Unterstützt werden u. a.
EXCLUDE, COLUMNS, QUALIFY, Modifikatoren für Window-Function-Aggregationen und Function Chaining (first_name.lower().trim()).
- Diese Funktionen machen komplexe Auswahl- und Transformationsaufgaben bei Spalten deutlich kompakter.
-
Unterstützung für verschiedene Dateiformate
- Daten können direkt aus S3, Web-URLs und lokalen Dateien abgefragt werden.
- Für CSV bietet DuckDB Optionen zur strengen Typbehandlung, um Fehler durch unstrukturierte Eingabedaten zu vermeiden.
-
Python-API
- In Python lassen sich CTE-basierte Pipelines schrittweise definieren, und die Daten jedes Schritts können leicht überprüft werden.
- Über Aufrufe von
duckdb.sql() kann SQL in Kettenform verbunden werden.
- Dank Lazy Execution lassen sich Zwischenergebnisse ohne Performance-Verlust prüfen.
- Funktionen pro Schritt können getestet werden, was die Effizienz von CI-Tests verbessert.
-
ACID-Konformität
- DuckDB bietet vollständige ACID-Garantien, auch bei der Arbeit mit großen Datenmengen.
- Dadurch kann es als Alternative im mittleren Maßstab zu Lakehouse-Formaten wie Iceberg und Delta Lake genutzt werden.
-
Hochleistungs-UDFs und Community-Erweiterungen
- Benutzerdefinierte Funktionen (UDFs) mit hoher Performance können in C++ geschrieben werden.
- Über Community Extensions lassen sich Erweiterungen sofort mit Befehlen wie
INSTALL h3 FROM community installieren.
- Beispiel: Unterstützung für hexagonale Indizierung (h3) für Geodaten.
-
Dokumentation
- Die gesamte Dokumentation wird als eine einzelne Markdown-Datei bereitgestellt, was sich gut für LLM-Training oder die Suche im Code-Editor eignet.
- Mit Code-Folding lassen sich nur die benötigten Abschnitte leicht kopieren.
Praktische Nutzung und Wirkung
- Im Open-Source-Projekt Splink führte die Einführung von DuckDB als Standard-Backend zu folgenden Ergebnissen:
- Weniger Nutzerprobleme, höhere Arbeitsgeschwindigkeit sowie vereinfachte Feature-Entwicklung und Tests
Bemerkenswerte Erweiterungen
- PostgreSQL Extension: Postgres-Datenbanken können direkt aus DuckDB verbunden und abgefragt werden.
- pg_duckdb: Bettet die DuckDB-Engine in Postgres ein, sodass Transaktions- und Analyseverarbeitung parallel möglich sind.
- Künftig besteht nach Optimierungen bei Postgres-Indizes und Verbesserungen beim Filter Push-up das Potenzial für breite Verbreitung.
Noch keine Kommentare.