- DuckDB kann wie eine Datenbank funktionieren, auch wenn die Daten nicht tatsächlich intern in der Datenbank gespeichert sind
- Die Daten werden in einem separaten Speicher abgelegt, und die Datenbank arbeitet, indem sie darauf verweist
- Die Datenbankdatei enthält keine eigentlichen Daten, sondern nur Anweisungen dazu, wie die Daten verarbeitet werden sollen
Beispiel: Robotaxi-Service
- Beschreibung der Situation: In einem Robotaxi-Service müssen die täglich erzeugten Daten mit Analysten geteilt werden.
- Problem: Die Daten sind zu groß, um sie per E-Mail zu verschicken, und auch das Teilen per Link ist umständlich.
- Lösung: Mit DuckDB wird eine Datenbankdatei erstellt und anschließend geteilt.
# 데이터베이스 생성
import duckdb
db = duckdb.connect("weird_rides.db")
db.sql("""
CREATE VIEW weird_rides
AS SELECT pickup_at, dropoff_at, trip_distance, total_amount
FROM 's3://robotaxi-inc/daily-ride-data/*.parquet'
WHERE fare_amount > 100 AND trip_distance < 10.0
""")
db.close()
- Ergebnis: Die Datei
weird_rides.db enthält keine echten Daten, sondern Anweisungen dazu, wie die Daten verarbeitet werden sollen.
- Art der Freigabe: Die Datei wird in einen Blob-Speicher hochgeladen und der Link dazu geteilt.
Datenzugriff
- Verbindung zur Datenbank: Der Empfänger startet eine lokale DuckDB-Session und verbindet sich mit der freigegebenen Datenbankdatei.
# 데이터베이스 연결
import duckdb
conn = duckdb.connect()
conn.sql("""
ATTACH 's3://robotaxi-inc/virtual-datasets/weird_rides.db'
AS rides_db (READ_ONLY)
""")
conn.sql("SELECT * FROM rides_db.weird_rides LIMIT 5")
- Daten-Download: Beim Ausführen der Query werden nur die aus S3 benötigten Daten heruntergeladen.
- Effiziente Datenverarbeitung: Es werden nur die benötigten Spalten gelesen, und durch Filter werden unnötige Daten ausgeschlossen.
Vorteile von DuckDB
- Robust gegenüber Änderungen: Selbst wenn sich Datenformat, Partitionierungsstrategie oder Schema ändern, bleibt die Art des Datenzugriffs für den Empfänger gleich.
- Daten-Cloud-Browser: Mit DuckDB lassen sich relationale Datensätze über Hyperlinks einfach aufrufen.
2 Kommentare
Oh, bei großen Datenmengen könnte man vielleicht ein paar Server-Ressourcen sparen, wenn schon der Katalog und der genaue Pfad zu den kleinen Daten ausreichen, haha.
Hacker-News-Kommentare
Effiziente Verarbeitung von Antwort-Sheets eines Form-Builder-SaaS mit DuckDB und duckdb-wasm: Antwortdaten werden in S3 gespeichert und auf dem Client über duckdb-wasm als lokale DB abgefragt, um Netzwerk- und Speichernutzung zu optimieren.
Vorstellung von MotherDuck: Ein serverloses, verwaltetes DuckDB-Data-Warehouse, das Zero-Copy-Clones, sicheres Sharing und einen Hybridmodus mit Cloud-Daten bietet.
Integration von DuckDB in den SQL-Editor qStudio: Unterstützt Joins mit verschiedenen Datenbanken und wird als guter IDE-Einstieg für DuckDB empfohlen.
Vorschlag, Daten über S3-Links bereitzustellen: Der Wert von zwischengeschalteten Datenbanken und Views wird infrage gestellt; stattdessen wird argumentiert, dass Datenanalysten effizienter direkt mit Rohdaten arbeiten könnten.
Vorstellung von Data Tap: Eine Lösung, die DuckDB in Lambda-Funktionen einbettet und Daten im Parquet-Format in S3 speichert, wobei Kosteneffizienz und Skalierbarkeit betont werden.
Verwirrung über Datenzugriffsansätze: Es wird erklärt, dass Data Engineers Voraggregation eher vermeiden, während Datenanalysten tendenziell den Zugriff auf Rohdaten bevorzugen.
Reaktion auf die Behauptung, die meisten Datenbanken enthielten keine Daten: Diese Aussage wird als übertrieben angesehen.
Vorschlag, SQL-Abfragen per E-Mail an Kollegen zu senden: Dabei wird der Nutzen binärer Datenbankdateien infrage gestellt.
Zweifel am Nutzen neuer SQL-Tools: Es wird für sinnvoller gehalten, Daten in einem persistenten Data Warehouse zu speichern und die benötigten Views dort zu erzeugen.
Ähnlichkeit mit Presto/Trino: Es wird die Meinung geäußert, dass der Ansatz von DuckDB dem von Presto/Trino ähnelt.