Beliebte Suchanfragen
//

Datenanalyse mit MotherDuck und DuckDB: Aus CSV zu Insights in 5 Minuten

30.9.2025 | 7 Minuten Lesezeit

Your First Data Analysis with MotherDuck and DuckDB: From CSV to Insights in 5 Minutes

CSV-Dateien sind der ewige Klassiker im Datenaustausch. Auch wenn modernere Formate wie JSON und Parquet ihren Platz erobern, bleiben die einfachen, aber robusten Comma Separated Values das Rückgrat vieler Daten-Workflows. Aber Hand aufs Herz: Wer hat sich nicht schon mal gequält, als ein riesiger Datensatz das Lieblings-Tool wie Excel in die Knie zwang? Genau hier kommen DuckDB und MotherDuck ins Spiel.

Dieser Post zeigt dir, wie du mit dieser Power-Kombination selbst gigantische CSV-Dateien blitzschnell analysierst. Das Beste daran? Du brauchst keine aufwändige Server-Infrastruktur. Einfach SQL, direkter Zugriff auf deine Dateien und schon hast du aus rohen Daten wertvolle Erkenntnisse gewonnen. Bereit für eine neue Art der Datenanalyse?

Vom Gigabyte zu Insights: CSVs parsen mit DuckDB

Setup

Falls du DuckDB noch nicht installiert hast, installiere bitte die DuckDB CLI auf deinem Rechner. Die Anleitung findest du hier: DuckDB Installation.

Der Datensatz

Wir nutzen den bekannten New York City Taxi-Datensatz, genauer die Daten der Yellow Taxis von 2023, die hier verfügbar sind. Mit rund 38,3 Millionen Einträgen und einer Größe von 3,78 GB ist er der perfekte Testfall. Eine solche Dateigröße ist für Tools wie Microsoft Excel meist viel zu groß und genau hier kommt die Power von DuckDB und MotherDuck ins Spiel.

[!NOTE]
In MotherDuck gibt es eine sample_data Datenbank, die New York City Taxidaten für Dezember 2022 enthält, was ungefähr 10 % des Datenvolumens darstellt, welches wir in diesem Post verwenden.

Den Datensatz laden

DuckDB unterstützt zwei Modi: In-Memory und Persistent. Um den Datensatz in eine dauerhafte DuckDB-Datenbank zu laden, erstelle zuerst die nyc_taxi.duckdb Datenbank. Führe dazu folgenden Befehl aus:

1duckdb nyc_taxi.duckdb

Sobald die Datenbank erstellt ist, lade den Datensatz mit dem nächsten Befehl innerhalb der DuckDB CLI.

1.timer on
2CREATE TABLE nyc_yellow_taxi_trips AS FROM '2023_Yellow_Taxi_Trip_Data_20250903.csv';

Je nach Rechner-Power dauert das nur wenige Sekunden. Auf einem Mac M3 wird der gesamte 3,78 GB große Datensatz mit über 38 Millionen Einträgen in ungefähr 3,5 Sekunden geladen, was die beeindruckende Performance von DuckDB unterstreicht.

1Run Time (s): real 3.540 user 38.143785 sys 1.770184

Erste Abfrage: Die Fahrtdauer berechnen

Sobald die Daten geladen sind, können wir unsere erste Abfrage starten. Wir berechnen die Fahrtdauer, also die Differenz zwischen tpep_dropoff_datetime und tpep_pickup_datetime.

1.timer on
2SELECT *, (tpep_dropoff_datetime - tpep_pickup_datetime) AS trip_duration 
3FROM nyc_yellow_taxi_trips;

Das Ergebnis? Die Fahrtdauer für alle 38,3 Millionen Einträge ist in nur etwa einer Sekunde berechnet.

1Run Time (s): real 1.304 user 1.268312 sys 2.229287

Daten anreichern - die Fahrtdauer als neue Spalte speichern

Um für spätere Abfragen, die die Fahrtdauer nutzen, zu vereinfachen, speichern wir diese Werte in einer neuen Spalte. Das geht mit einem einfachen Befehl, der eine neue Spalte namens trip_duration anlegt.

1ALTER TABLE nyc_yellow_taxi_trips
2ADD COLUMN trip_duration INTERVAL;
3UPDATE nyc_yellow_taxi_trips
4SET trip_duration = tpep_dropoff_datetime - tpep_pickup_datetime;

Jetzt nutzen wir die neue Spalte, um die durchschnittliche Fahrtdauer zu berechnen.

1.timer on
2SELECT AVG(trip_duration) FROM nyc_yellow_taxi_trips;

MotherDuck: DuckDB in der Cloud

Die lokale Performance von DuckDB ist beeindruckend, aber wie wäre es, wenn du diese Power mit deinem Team teilen und von überall darauf zugreifen könntest? Das ist der Moment, in dem MotherDuck ins Spiel kommt. Es kombiniert DuckDBs In-Process-Performance mit der Skalierbarkeit und dem Komfort der Cloud.

[!NOTE]
Dafür brauchst du einen MotherDuck Account, den du ganz einfach auf https://motherduck.com erstellen kannst.

Um die CSV-Daten in MotherDuck zu laden, öffne eine neue DuckDB CLI Session mit diesem Befehl:

1duckdb

Anschließend führe die folgenden Befehle in der DuckDB CLI-Shell aus.

[!NOTE]
Wenn du die Umgebungsvariable motherduck_token noch nicht gesetzt hast (wie in der MotherDuck-Doku beschrieben), öffnet sich ein Browserfenster, in dem du den Zugriff der DuckDB CLI auf MotherDuck bestätigen musst.

1ATTACH 'md:';
2CREATE OR REPLACE DATABASE nyc_yellow_taxi_trips;
3USE nyc_yellow_taxi_trips;
4CREATE OR REPLACE TABLE nyc_yellow_taxi_trips AS FROM '2023_Yellow_Taxi_Trip_Data_20250903.csv';

Diese Befehle erstellen eine neue Datenbank nyc_yellow_taxi_trips erstellt und eine neue Tabelle gleichen Namens und lädt die Daten in die neue Tabelle. Dieser Schritt kann je nach Internet-Upload-Geschwindigkeit zwischen zwei und drei Minuten dauern.

[!NOTE]
Dieser Post konzentriert sich auf lokale CSV-Dateien, aber DuckDB/MotherDuck unterstützt auch den Import von CSV-Daten aus verschiedenen Object Storage Systemen, wie AWS S3, Azure Blob Storage und Google Cloud Storage.

Durchschnittliche Fahrtdauer in Abhängigkeit der Passagierzahl

Jetzt kannst du die Daten direkt im Browser analysieren. Gehe in deinem Browser zu https://app.motherduck.com und erstelle ein neues Notebook mit dem Titel nyc_yellow_taxi_trips. Füge in die erste Zelle die SQL-Anweisung aus dem folgenden Block ein und führe sie aus, indem du auf den kleinen Dreieck-Button klickst.

1SELECT passenger_count, AVG(tpep_dropoff_datetime - tpep_pickup_datetime) AS avg_trip_duration 
2FROM nyc_yellow_taxi_trips 
3GROUP BY passenger_count
4ORDER BY passenger_count;

Hängt die Höhe des Trinkgeldes von der Distanz ab?

Für einen Taxifahrer ist das eine entscheidende Frage: Hängt das Trinkgeld von der Länge der Fahrt ab? Dies können wir mit dem folgenden SQL Statement evaluieren:

1SELECT 
2 CASE WHEN trip_distance BETWEEN 0 AND 4 THEN 'short'
3      WHEN trip_distance BETWEEN 4 AND 9 THEN 'medium'
4      WHEN trip_distance > 9 THEN 'long' 
5      END AS trip_length,
6 AVG(fare_amount) AS fare, 
7 AVG(tip_amount) AS tip
8 FROM nyc_yellow_taxi_trips
9 GROUP BY trip_length
10 ORDER BY tip DESC;

Wie du siehst, gilt: Je länger die Fahrt, desto höher das Trinkgeld für den Taxifahrer.

trip_lengthfaretip
long60.667412574820499.713919128310547
medium29.656544597381065.005007720056084
short12.7755052924382152.5128599942576764

Die Abholorte mit den längsten Fahrten

Da wir gesehen haben, dass längere Fahrten lukrativer sind (das Trinkgeld ist fast viermal so hoch!), finden wir jetzt die 20 interessantesten Abholorte mit den längsten Durchschnittsfahrten und dem höchsten Durchschnittstrinkgeld. Wir berücksichtigen weiterhin nur Orte mit mehr als 1000 Fahrten.

Führe dasu bitte folgendes SQL-Statement aus:

1SELECT
2    PULocationID,
3    COUNT(*) AS trip_count,
4    AVG(trip_distance) AS avg_trip_distance,
5    AVG(total_amount) AS avg_total_amount,
6    AVG(tip_amount) AS avg_tip_amount
7FROM
8    nyc_yellow_taxi_trips
9GROUP BY
10    PULocationID
11HAVING
12    trip_count > 1000
13ORDER BY
14    avg_tip_amount DESC
15LIMIT 20;

In nur wenigen Millisekunden haben wir die Info aus über 38,3 Millionen Einträgen welches die lukrativsten Standorte sind. Mit diesen Daten kann ein Taxifahrer seinen Gewinn optimieren, indem er sich strategisch in der Nähe der profitabelsten Abholorte positioniert.

Sind Fahrten vom Flughafen profitabler?

Zum Schluss wollen wir herausfinden, ob Fahrten vom Flughafen profitabler sind als andere.

Wir vergleichen dazu das durchschnittliche Trinkgeld für Fahrten vom Flughafen mit dem von anderen Startorten. Zur Vereinfachung betrachten wir nur den Durchschnittspreis, ohne Fahrtdauer oder andere Faktoren. Der Zielort kann das Trinkgeld ebenfalls beeinflussen, was wir hierbei aus Verenfachungsgründen nicht weiter betrachten. Die PULocationID für die drei Flughäfen sind 1, 132, 138.

1SELECT
2    CASE
3        WHEN PULocationID IN (1, 132, 138) THEN 'airport'
4        ELSE 'not_airport'
5    END AS pickup_type,
6    AVG(tip_amount) AS avg_tip_amount,
7    COUNT(*) AS trip_count
8FROM
9    nyc_yellow_taxi_trips
10GROUP BY
11    pickup_type;

Auch hier bekommen wir das Ergebnis in Millisekunden zurück und unsere Annahme erweist sich als korrekt: Das Trinkgeld für Flughafen-Fahrten ist fast dreimal so hoch!

Fazit

DuckDB und MotherDuck revolutionieren die Datenanalyse durch eine hohe Geschwindigkeit und Effizienz, besonders bei großen Datensätzen. Die typischen Hürden von Big Data - wie zeitraubendes Laden und der Bedarf an komplexer Infrastruktur - werden praktisch eliminiert.

Der DuckDB-Vorteil: Schnell und simpel

Mit DuckDB ist das Laden von Gigabytes an Daten keine stundenlange Tortur mehr, sondern eine Sache von Sekunden. Dieser Geschwindigkeitsvorteil gilt auch für Abfragen, die extrem schnell ausgeführt werden und Einblicke in Echtzeit ermöglichen, die früher unerreichbar waren. Das ist ein großer Unterschied zu herkömmlichen CSV-Tools, die unter der Last großer Datensätze oft zusammenbrechen oder lange Zeit brauchen, um große Datenmengen zu verarbeiten.

Traditionelle Data Warehouse-Lösungen sind zwar mächtig, verlangen aber oft eine erhebliche Vorabinvestition in Zeit und Ressourcen. Sie benötigen komplexe Daten-Pipelines, um Daten zu laden, gefolgt von der Bereitstellung und Skalierung von Rechenressourcen, bevor überhaupt die erste Abfrage ausgeführt werden kann. Dieses aufwendige Setup führt oft zu Tagen oder sogar Wochen der Vorbereitung, bevor die eigentliche Analyse beginnen kann.

MotherDuck: Der Cloud-Native-Partner

MotherDuck ergänzt DuckDB, indem es dieses in die Cloud bringt und eine serverless Variante bereitstellt, welche die Datenanalyse weiter vereinfacht. Diese Kombination erlaubt es, dass Nutzer die Power von DuckDBs Engine mit der Skalierbarkeit und Zugänglichkeit einer Cloud-Plattform nutzen können, ohne den operativen Overhead.

Das "First Query" Rennen

Die Stärke von DuckDB und MotherDuck zeigt sich im sogenannten First Query Rennen. Während andere Lösungen noch konfiguriert werden oder gerade erst mit dem Laden der Daten beginnen, haben Nutzer von DuckDB und MotherDuck ihre Analyse oft schon abgeschlossen, entscheidende Einblicke gewonnen und können datengestützte Entscheidungen treffen. Diese Agilität verschafft einen erheblichen Vorteil und ermöglicht schnellere Iterationen und Entscheidungen.

Kurz gesagt, DuckDB und MotherDuck sind nicht nur Tools, sie sind ein Paradigmenwechsel in der Datenanalyse. Sie machen diese zugänglicher, schneller und deutlich unkomplizierter um aus Daten wertvolle Informationen zu extrahieren.

Beitrag teilen

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//
Jetzt für unseren Newsletter anmelden

Alles Wissenswerte auf einen Klick:
Unser Newsletter bietet dir die Möglichkeit, dich ohne großen Aufwand über die aktuellen Themen bei codecentric zu informieren.