Saltar a contenido

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 .venv con Python ≥ 3.11.
  • pip install "duckdb==2.0.0" "polars[pyarrow]" pandas jupyterlab.
  • jupyter lab cuadernos/ y ejecutar 00_entorno.ipynb entero.
  • Extensiones quack y mysql descargadas (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

  1. Repetir el pipeline MySQL → Parquet → dashboard con datos propios.
  2. Migrar un cuaderno de la 1.5 a la 2.0 y documentar cada rotura.
  3. Medir el mismo GROUP BY con ATTACH y con CONNECT sobre >10 M de filas y traer números.