- DuckDB puede funcionar como una base de datos incluso si los datos no están almacenados internamente dentro de la base de datos
- Los datos se almacenan en un repositorio separado, y la base de datos opera haciendo referencia a ellos
- El archivo de base de datos no incluye los datos reales; solo contiene instrucciones sobre cómo procesarlos
Ejemplo: servicio de robotaxis
- Descripción de la situación: En un servicio de robotaxis, es necesario compartir con analistas los datos que se generan cada día.
- Problema: Los datos son demasiado grandes para enviarlos por correo electrónico, y compartirlos mediante un enlace también resulta complicado.
- Solución: Se crea un archivo de base de datos con DuckDB y luego se comparte.
# 데이터베이스 생성
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()
- Resultado: El archivo
weird_rides.db no contiene los datos reales, pero sí incluye instrucciones sobre cómo procesarlos.
- Cómo se comparte: Este archivo se sube a un blob storage y se comparte el enlace.
Acceso a los datos
- Conexión a la base de datos: El receptor inicia una sesión local de DuckDB y se conecta al archivo de base de datos compartido.
# 데이터베이스 연결
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")
- Descarga de datos: Al ejecutar la consulta, solo se descargan desde S3 los datos necesarios.
- Procesamiento eficiente de datos: Solo se leen las columnas necesarias y se aplican filtros para excluir datos innecesarios.
Ventajas de DuckDB
- Resistente a los cambios: Aunque cambien el formato de los datos, la estrategia de particionado o el esquema, la forma en que el receptor accede a los datos no cambia.
- Navegador de datos en la nube: Con DuckDB, se puede acceder fácilmente a datasets relacionales mediante hipervínculos.
2 comentarios
Oh, entonces incluso con datos grandes, si solo tienes el catálogo y la ruta exacta de los datos pequeños, quizá también se puedan ahorrar un poco los recursos del servidor jaja
Opiniones de Hacker News
Procesamiento eficiente de hojas de respuestas de un SaaS de creación de formularios con DuckDB y duckdb-wasm: Los datos de respuestas se almacenan en S3 y se consultan en una base de datos local desde el cliente mediante duckdb-wasm, optimizando el uso de red y memoria.
Introducción a MotherDuck: Un data warehouse administrado y serverless basado en DuckDB que ofrece clones sin copia, compartición segura y modo híbrido con datos en la nube.
Integración de DuckDB en el editor SQL qStudio: Soporta joins con varias bases de datos y se recomienda como un buen IDE para empezar con DuckDB.
Propuesta de entregar datos mediante enlaces de S3: Se cuestiona el valor de las bases de datos y vistas intermedias, y se argumenta que puede ser más eficiente que los analistas de datos trabajen directamente con datos en bruto.
Introducción a Data Tap: Una solución que incrusta DuckDB en funciones Lambda y almacena los datos en S3 en formato Parquet, destacando la eficiencia de costos y la escalabilidad.
Confusión sobre los enfoques de acceso a datos: Se explica que los ingenieros de datos tienden a evitar la preagregación, mientras que los analistas de datos prefieren acceder a los datos en bruto.
Reacción a la afirmación de que la mayoría de las bases de datos no contienen datos: Se considera que esa afirmación es exagerada.
Propuesta sobre cómo enviar consultas SQL por correo electrónico a colegas: Se pone en duda la ventaja de los archivos de base de datos binarios.
Dudas sobre la utilidad de las nuevas herramientas SQL: Se considera más apropiado almacenar los datos en un data warehouse persistente y crear las vistas necesarias.
Similitud con Presto/Trino: Algunas opiniones sienten que el enfoque de DuckDB es similar al de Presto/Trino.