Lesson 1 of 19· Bienvenida: analítica sin servidor
Tienes un archivo ventas.csv de varios cientos de miles de filas en tu carpeta de descargas. Quieres saber cuánto vendiste por categoría el mes pasado. ¿Montas un servidor PostgreSQL, creas una base de datos, cargas el archivo con COPY y recién entonces escribes tu SELECT? Es mucha ceremonia para una pregunta simple.
DuckDB elimina toda esa ceremonia. Es un motor SQL analítico que corre dentro de tu proceso de Python —sin servidor, sin instalación de un demonio, sin puertos ni credenciales— y consulta archivos CSV y Parquet directamente en disco. Escribes SQL de verdad, obtienes resultados en milisegundos, y el archivo nunca se "carga" a ningún lado: DuckDB lee solo lo que tu consulta necesita.
-- Esto funciona sin cargar nada primero. El archivo ES la tabla.
SELECT categoria, SUM(total) AS ingresos
FROM 'ventas.csv'
GROUP BY categoria
ORDER BY ingresos DESC;Ese es el nivel de fricción que buscamos: apuntas SQL a un archivo y ya.
La diferencia clave está en dónde vive el motor. Una base de datos tradicional (PostgreSQL, MySQL) es un servidor: un proceso separado, al que tu aplicación le habla por la red, con su propia instalación, configuración y administración. Es la herramienta correcta para muchas cosas —sobre todo cuando muchas aplicaciones escriben datos a la vez— pero es demasiada infraestructura solo para analizar unos archivos que ya tienes.
DuckDB es OLAP embebido: se importa como una librería (import duckdb) y se ejecuta in-process, en la misma memoria que tu script o notebook. No hay red de por medio, no hay servidor que administrar.
A la izquierda, tu código y los datos están separados por una frontera de proceso y de red que hay que instalar, arrancar y mantener. A la derecha, el motor vive dentro de tu propio programa y lee los archivos que ya están en tu máquina. Menos piezas, más velocidad, cero administración.
Si has usado SQLite, la analogía es directa: DuckDB es a la analítica lo que SQLite es a las transacciones. Un archivo, cero servidor, pero optimizado para GROUP BY sobre millones de filas en lugar de escrituras fila a fila.
Este curso no enseña SQL desde cero. Damos por sentado que ya te sientes cómodo escribiendo consultas analíticas: SELECT, WHERE, ORDER BY, GROUP BY con funciones de agregación, JOINs entre tablas y funciones de ventana (ROW_NUMBER, RANK, LAG/LEAD, SUM() OVER (...)). Si eso te suena familiar, estás en el lugar correcto.
Lo que sí vas a aprender es a apuntar todo ese SQL que ya conoces a archivos locales, sin base de datos de por medio, y a integrarlo con las herramientas de datos de Python que ya usas.
Es un curso corto y práctico —casi todo en notebooks que corres tú mismo. Al terminar podrás:
glob.Para que cada lección construya sobre la anterior, usaremos el mismo escenario realista de principio a fin: las ventas de una tienda de electrónica online. Cada fila es una línea de pedido, con columnas como fecha, ciudad, categoria (Laptops, Teléfonos, Audio, Accesorios, Monitores), producto, precio_unitario, cantidad y total.
| order_id | fecha | ciudad | categoria | producto | total |
|---|---|---|---|---|---|
| 1001 | 2024-01-05 | Bogotá | Laptops | Laptop Aer 14 | 3.200.000 |
| 1002 | 2024-01-05 | Medellín | Audio | Audífonos Nova | 360.000 |
| 1003 | 2024-01-06 | Cali | Teléfonos | Teléfono Zeta 5 | 2.100.000 |
| 1005 | 2024-02-11 | Barranquilla | Monitores | Monitor Vista 27 | 1.250.000 |
Más adelante veremos ese mismo dataset repartido en varios archivos Parquet mensuales (ventas_2024_01.parquet, ventas_2024_02.parquet, …) para practicar la lectura de muchos archivos a la vez. Reutilizar un solo escenario te deja concentrarte en DuckDB, no en entender datos nuevos en cada lección.
Suficiente presentación —lo mejor de DuckDB es lo poco que hay que preparar antes de empezar. En la próxima lección abres un notebook y, en menos de tres minutos, escribes y ejecutas tu primera consulta: importas DuckDB, apuntas un SELECT a los datos de ventas y ves resultados reales al instante, sin haber instalado ni configurado absolutamente nada. Vamos a ello.
Free