
Bild des Autors
Duckdb ist eine schnelle, in prozess analytische Datenbank, die für die moderne Datenanalyse entwickelt wurde. Es wird direkt von Ihrem Python -Skript aus ausgeführt, was bedeutet, dass kein separater Server benötigt wird, und es ist dank seines Spaltenspeichers und der vektorisierten Ausführung komplexe Abfragen erforderlich.
Da das Verständnis, mit Daten umzugehen, immer wichtiger wird, möchte ich Ihnen heute zeigen, wie Sie einen Python -Workflow mit Duckdb erstellen und seine wichtigsten Funktionen erkunden.
Lass uns eintauchen!
Was ist Duckdb?
Duckdb ist eine kostenlose Open-Supply-In-Course of-OLAP-Datenbank für schnelle lokale Analysen. Im Gegensatz zu herkömmlichen Datenbanken, die als externe Dienste ausgeführt werden, läuft DuckDB in Ihrer Anwendung, ohne dass der Server erforderlich ist. Als OLAP -System speichert Duckdb Daten in Spalten (nicht wie Zeilen wie OLTP -Systeme), was es für analytische Abfragen wie Verbindungen, Aggregationen und Gruppierungen sehr effizient macht.
Stellen Sie sich Duckdb als eine leichte, analytic-optimierte Model von SQLite vor, die die Einfachheit lokaler Datenbanken mit der Kraft der modernen Knowledge-Lagerung zusammenbringt. Und das führt uns zu den folgenden natürlichen Frage …
Was sind die Hauptmerkmale von Duckdb?
Blazing-schnelle analytische Abfragen
Duckdb liefert eine beeindruckende Leistung für OLAP -Workloads, was oft überraschende Benutzer, die mit herkömmlichen Datenbanken wie PostgreSQL vertraut sind. Im Gegensatz zu herkömmlichen OLAP -Systemen, die aufgrund der Verarbeitung großer Datenvolumina träge sein können, nutzt Duckdb einen säulenförmigen, vektorisierten Ausführungsmotor. Dieses Design optimiert die Verwendung von CPU -Cache und beschleunigt die Analyse -Abfrageleistung erheblich.
Native SQL -Unterstützung + nahtlose Sprachintegration
Duckdb bietet eine vollständige Unterstützung für komplexe SQL -Abfragen und enthält APIs in mehreren Sprachen, einschließlich Java, C und C ++. Die enge Integration in Python und R macht es supreme für die interaktive Datenanalyse. Sie können Abfragen direkt in Ihre bevorzugte Umgebung schreiben, mit zusätzlichen SQL -Syntaxverbesserungen (z. B. ausschließen, ersetzen, ersetzen und alle), um das Schreiben von Abfragen zu vereinfachen.
Und das Beste daran ist, dass Duckdb völlig in sich geschlossen ist, ohne externe Abhängigkeiten oder Kopfschmerzen.
Frei und Open Supply
Duckdb ist vollständig offen und wird von einer wachsenden Gemeinschaft von Mitwirkenden aktiv aufrechterhalten. Dies gewährleistet eine schnelle Characteristic -Entwicklung und Fehlerbehebungen. Und ja, es ist kostenlos zu bedienen. Während zukünftige Änderungen der Lizenzierung immer eine Möglichkeit sind, erhalten Sie vorerst eine leistungsstarke Analyse -Engine zu null Kosten.
Jetzt, da wir seine Hauptmerkmale kennen, beginnen wir damit!
Erste Schritte mit Duckdb
Der Installationsprozess für DuckDB hängt geringfügig von Ihrer Umgebung ab, aber insgesamt ist es schnell und einfach. Da Duckdb eine eingebettete Datenbank -Engine ohne Serveranforderungen oder externe Abhängigkeiten ist, dauert das Setup in der Regel nur wenige Codezeilen. Die vollständige Installationshandbuch finden Sie in der offiziellen Duckdb -Dokumentation.
Voraussetzungen
Stellen Sie vor dem Tauchen sicher, dass Sie Folgendes haben:
- Python 3.13 oder später installiert
- Ein grundlegendes Verständnis der SQL- und Datenanalyse in Python
Sie können Duckdb in Ihrer Umgebung problemlos installieren, indem Sie den folgenden Befehl ausführen:
Arbeiten mit Duckdb in Python
Sobald Sie Duckdb installiert haben, ist es ziemlich einfach, loszulegen. Sie importieren einfach Duckdb in Ihre Umgebung, stellen dann eine Verbindung zu einer vorhandenen Datenbank her oder erstellen Sie bei Bedarf eine neue.
Zum Beispiel:
import duckdb
connection = duckdb.join()
Wenn keine Datenbankdatei zur Verfügung gestellt wird join()
Methode, Duckdb erstellt standardmäßig eine neue In-Reminiscence-Datenbank. Der einfachste Weg, um SQL -Abfragen auszuführen, besteht darin, die Verwendung des sql()
Methode direkt.
# Supply: Primary API utilization - https://duckdb.org/docs/api/python/overview.html
import duckdb
duckdb.sql('SELECT 42').present()
Ausführen dieses Befehls initialisiert eine globale In-Reminiscence-Duckdb-Instanz im Python-Modul und gibt eine Beziehung zurück, eine symbolische Darstellung der Abfrage.
Wichtig ist, dass die Abfrage selbst erst ausgeführt wird, wenn Sie das Ergebnis ausdrücklich anfordern, wie unten gezeigt:
# Supply: Execute SQL - https://duckdb.org/docs/guides/python/execute_sql.html
outcomes = duckdb.sql('SELECT 42').fetchall()
print(outcomes)
"""
((42,))
"""
Lassen Sie uns jetzt mit einigen echten Daten arbeiten. Duckdb unterstützt eine breite Palette von Dateiformaten, einschließlich CSV, JSON und Parquet, und das Laden ist einfach.
Sie können sehen, wie einfach es im folgenden Beispiel ist:
# Supply: Python API - https://duckdb.org/docs/api/python/overview.html
import duckdb
duckdb.read_csv('instance.csv') # learn a CSV file right into a Relation
duckdb.read_parquet('instance.parquet')# learn a Parquet file right into a Relation
duckdb.read_json('instance.json') # learn a JSON file right into a Relation
duckdb.sql('SELECT * FROM "instance.csv"') # straight question a CSV file
Arbeiten mit externen Datenquellen in Duckdb
Eine der herausragenden Funktionen von Duckdb ist die Fähigkeit, externe Datendateien direkt abzufragen, ohne sie in eine Datenbank zu importieren oder ganze Datensätze in den Speicher zu laden. Im Gegensatz zu herkömmlichen Datenbanken, in denen Daten zuerst aufgenommen werden müssen, unterstützt DuckDB ein Ausführungsmodell „Zero-Copy“, sodass es nur die für eine bestimmten Abfrage erforderlichen Daten lesen kann.
Dieser Ansatz bringt mehrere wichtige Vorteile mit sich:
- Minimale Speicherverwendung: Nur die relevanten Teile der Datei werden in den Speicher gelesen.
- Kein Import-/Exportaufwand: Fragen Sie Ihre Daten ab – Sie müssen sie nicht verschieben oder duplizieren.
- Stropherde Workflows: Mithilfe einer einzelnen SQL -Anweisung leicht über mehrere Dateien und Formate hinweg abfragen.
Um die Verwendung von Duckdb zu veranschaulichen, werden wir eine einfache CSV -Datei verwenden, die Sie aus den folgenden erhalten können Kaggle Hyperlink .
Um die Daten abzufragen, können wir leicht eine einfache Abfrage definieren, die auf unseren Dateipfad hinweist.
# Question information straight from a CSV file
consequence = duckdb.question(f"SELECT * FROM '{supply}'").fetchall()
print(consequence)
Jetzt können wir Daten einfach mit SQL-ähnlicher Logik direkt mit Duckdb verarbeiten.
Filterreihen
Verwenden Sie die The place -Klausel in Duckdb, um sich auf bestimmte Datenabteilungen zu konzentrieren. Es filtert Zeilen basierend auf Bedingungen unter Verwendung von Vergleichsoperatoren (>, <, =, <> usw.) und logischen Operatoren (und, oder nicht) für komplexere Ausdrücke.
# Choose solely college students with a rating above 80
consequence = duckdb.question(f"SELECT * FROM '{supply}' WHERE total_passengers > 500").fetchall()
consequence
Ergebnisse sortieren
Verwenden Sie die Bestellung nach Klausel, um die Ergebnisse nach einer oder mehreren Spalten zu sortieren. Es ist standardmäßig auf Ascending (ASC), aber Sie können absteigend angeben (Desc). Um nach mehreren Spalten zu sortieren, trennen Sie sie mit Kommas.
#Kind months by variety of passengers
sorted_result = duckdb.question(f"SELECT * FROM '{supply}' ORDER BY total_passengers DESC ").fetchall()
print("nMonths sorted by complete visitors:")
print(sorted_result)
Hinzufügen von berechneten Spalten
Erstellen Sie neue Spalten in Ihrer Abfrage mit Ausdrücken und dem Key phrase. Verwenden Sie arithmetische Operatoren oder integrierte Funktionen, um Daten zu transformieren. Diese Spalten erscheinen in den Ergebnissen, beeinflussen jedoch nicht die Originaldatei.
# Add 10 bonus factors to every rating
bonus_result = duckdb.question(f"""
SELECT
month,
total_passengers,
total_passengers/1000 AS traffic_in_thousands
FROM '{supply}'
""").fetchall()
print("nScores with 10 bonus factors:")
print(bonus_result)
Verwendung von Fallausdrücken
Für komplexere Transformationen liefert SQL den Fallausdruck. Dies funktioniert ähnlich wie IF-ELSE-Anweisungen in Programmiersprachen, sodass Sie in Ihren Fragen eine bedingte Logik anwenden können.
segmented_result = duckdb.question(f"""
SELECT
month,
total_passengers,
CASE
WHEN total_passengers >= 100 THEN 'HIGH'
WHEN total_passengers >= 50 THEN 'MEDIUM'
ELSE 'LOW'
END AS affluency
FROM '{supply}'
""").fetchall()
print("nMonth by affluency of passangers")
print(segmented_result)
Abschluss
Duckdb ist eine Hochleistungs-OLAP-Datenbank für Datenfachleute, die große Datensätze effizient untersuchen und analysieren müssen. Die In-Course of-SQL-Engine führt komplexe analytische Abfragen direkt in Ihrer Umgebung aus-es ist kein separater Server erforderlich. Mit nahtloser Unterstützung für Python, R, Java, C ++ und mehr passt Duckdb auf natürliche Weise in Ihren vorhandenen Workflow, unabhängig von Ihrer bevorzugten Sprache.
Sie können den vollständigen Code auf dem überprüfen folgt Github Repository.
Josep Ferrer ist ein Analyseingenieur aus Barcelona. Er absolvierte das Physik -Engineering und arbeitet derzeit im Bereich Knowledge Science, der für die menschliche Mobilität angewendet wurde. Er ist ein Teilzeit-Inhaltsersteller, der sich auf Datenwissenschaft und -technologie konzentriert. Josep schreibt über alle Dinge KI und deckt die Anwendung der laufenden Explosion vor Ort ab.