09 · Guion de la sesión (2 h 30 – 3 h)¶
Para el profesor
Orden pensado para que cada módulo produzca un resultado visible antes de pasar al siguiente. Volver al 00 - Índice de la demo.
Agenda¶
gantt
title Taller DuckDB 2.0 (minutos)
dateFormat HH:mm
axisFormat %H:%M
section Bloque 1 · contexto
Bienvenida y entorno :a1, 09:00, 10m
01 Panorama 2.0 :a2, after a1, 15m
section Bloque 2 · local
02 SQL :b1, after a2, 20m
03 Polars :b2, after b1, 20m
Pausa :crit, b3, after b2, 10m
section Bloque 3 · ficheros
04 CSV y JSON :c1, after b3, 15m
05 Parquet y Hive :c2, after c1, 20m
section Bloque 4 · remoto
06 MySQL / MariaDB :d1, after c2, 20m
07 Quack :d2, after d1, 15m
section Cierre
08 VARIANT :e1, after d2, 10m
Ejercicios y dudas :e2, after e1, 15m
| Bloque | Contenido | Min | Señal de que ha funcionado |
|---|---|---|---|
| 1 | Panorama y entorno | 25 | Todos ven 2.0.0 en pantalla |
| 2 | SQL + Polars | 40 | Tabla agregada creada en ambos motores |
| 3 | CSV/JSON/Parquet | 35 | Parquet particionado leído con year/month |
| 4 | MySQL + Quack | 35 | Un count(*) resuelto en remoto |
| 5 | VARIANT + cierre | 25 | variant_typeof con dos formas distintas |
Total: ~2 h 40 (margen hasta 3 h con dudas).
Antes de empezar (checklist)¶
-
python -m venv .venvcon Python ≥ 3.11. -
pip install "duckdb==2.0.0" "polars[pyarrow]" pandas jupyterlab. -
jupyter lab cuadernos/y ejecutar00_entorno.ipynbentero. - Extensiones
quackymysqldescargadas (requieren red la primera vez). - (Opcional) MariaDB en Docker para el módulo 06.
- Puerto 9494 libre para el módulo 07.
Truco de aula
Lanza 00_entorno.ipynb antes de que entre el alumnado. La descarga de extensiones es lo único que puede tardar y romper el ritmo.
Momento «ajá» por módulo¶
| Módulo | El instante que hay que subrayar |
|---|---|
| 02 | QUALIFY sustituye una subconsulta entera |
| 03 | El mismo DataFrame se consulta con SQL sin copiarse |
| 04 | Un JSON anidado se filtra por direccion.ciudad sin json_extract |
| 05 | year=2025 aparece como columna sin haberla escrito |
| 06 | El plan muestra que el GROUP BY viajó a MariaDB |
| 07 | EXPLAIN imprime Quack Query By Name |
| 08 | Dos filas con estructura distinta conviven en una columna |
Errores que van a aparecer (y respuesta lista)¶
| Error | Causa | Respuesta |
|---|---|---|
ModuleNotFoundError: duckdb |
Kernel de otro venv | Reiniciar kernel / elegir intérprete |
duckdb 1.x instalado |
Python 3.10 | Subir a 3.11+ y reinstalar |
Deprecated lambda arrow |
Copiaron código de la 1.x | Nueva sintaxis lambda x: ... |
materialize() is not available while CONNECT-ed |
con.sql() con sesión redirigida |
con.execute(...) |
Failed to connect to MySQL |
Sin servidor o cadena DSN | Cadena mysql:host=... user=... |
Address already in use (9494) |
Servidor anterior vivo | CALL quack_stop(...) o cambiar puerto |
Binder Error: _metadata |
Ruta antigua para el fichero | filename = true |
Si vas con el tiempo justo¶
Recorta en este orden: 08 VARIANT → ejercicios de 05 → parte teórica de 02. Nunca recortes el par 06+07: es lo que hace que la sesión sea sobre la 2.0 y no sobre un DuckDB cualquiera.
Tarea para casa¶
- Repetir el pipeline MySQL → Parquet → dashboard con datos propios.
- Migrar un cuaderno de la 1.5 a la 2.0 y documentar cada rotura.
- Medir el mismo
GROUP BYconATTACHy conCONNECTsobre >10 M de filas y traer números.