Ir al contenido
learn

DuckDB — Misión

Cada pregunta que me hago sobre la CI de este sitio — qué workflow falla más, cuánto tardan los jobs de Windows, qué step se volvió más lento — acaba en un montón de JSON salido de gh run list y gh api. Lo leo con jq, o lo pego en una hoja de cálculo. DuckDB promete responder a esas preguntas con SQL, directamente desde los archivos, sin instalar ningún servidor.

Conoces el SQL de SQL Server, PostgreSQL o SQLite: SELECT, JOIN, GROUP BY. Escribes C# o Java. No necesitas saber nada de analítica ni de ingeniería de datos.

SQL Server / PostgreSQL SQLite DuckDB
Se ejecuta como un servidor dentro de tu proceso dentro de tu proceso
Pensado para transacciones (OLTP) transacciones, aplicaciones pequeñas analítica (OLAP): recorridos, agregaciones, joins sobre muchas filas
Almacenamiento por filas por filas por columnas
Base de datos una instancia de servidor un archivo un archivo, o ninguno: también consulta directamente archivos CSV, JSON y Parquet
Desde .NET Microsoft.Data.SqlClient, Npgsql Microsoft.Data.Sqlite DuckDB.NET (ADO.NET)
Desde Java driver JDBC driver JDBC driver JDBC

La primera fila de la tabla, en imagen: SQL Server y PostgreSQL se ejecutan como un servidor, en un proceso propio, mientras que DuckDB se ejecuta dentro de tu proceso, junto a los archivos que lee.

flowchart LR
subgraph p1["tu proceso"]
app1["código C# o Java"] --> driver["driver"]
end
subgraph p2["proceso servidor"]
server["SQL Server o PostgreSQL"]
end
driver --> server
subgraph p3["tu proceso"]
app2["código C# o Java"] --> duck["DuckDB, mediante DuckDB.NET o JDBC"]
end
dbfile[("un archivo de base de datos, o ninguno")]
files[("archivos CSV, JSON y Parquet")]
duck --> dbfile
duck --> files

El curso consulta una instantánea del historial de GitHub Actions de este mismo repositorio, exportada el 2026-09-14 en code/duckdb/data:

  • runs.json: 125 ejecuciones de workflows, obtenidas con gh run list --limit 1000 --json databaseId,workflowName,event,status,conclusion,createdAt,updatedAt,startedAt,headBranch,headSha,attempt;
  • jobs.json: los 315 jobs de esas ejecuciones, con sus steps, obtenidos de la API REST de GitHub.

Son las ejecuciones que produjo el curso de GitHub Actions: fallos reales, tiempos reales, tres sistemas operativos.

  • consultar archivos CSV, JSON y Parquet con SQL desde la CLI de DuckDB;
  • usar las extensiones SQL de DuckDB para escribir consultas analíticas más cortas;
  • aplanar JSON anidado con STRUCT, LIST y unnest;
  • convertir entre formatos y leer muchos archivos a la vez;
  • usar DuckDB desde C# y desde Java;
  • leer un plan de consulta y saber cuándo DuckDB no es la herramienta adecuada.
# Lección Si conoces SQL Server
1 Primeras consultas sqlcmd, OPENROWSET, SELECT INTO
2 Friendly SQL: fechas, ventanas, QUALIFY, PIVOT funciones de ventana, PIVOT
3 Datos anidados: STRUCT, LIST, unnest OPENJSON, CROSS APPLY
4 Archivos: CSV, Parquet, globs, archivos remotos BULK INSERT, tablas externas
5 DuckDB desde C# ADO.NET
6 DuckDB desde Java JDBC
7 Rendimiento: planes y almacenamiento por columnas planes de ejecución, índices columnstore
8 Persistencia, transacciones y concurrencia aislamiento, bloqueos
— Diario