30 puntos por GN⁺ 2026-01-18 | 2 comentarios | Compartir por WhatsApp
  • DuckDB es un motor SQL de código abierto que permite procesar datos tabulares a gran escala en una sola máquina de forma rápida y sencilla, y recientemente se ha usado ampliamente en ingeniería de datos
  • Es fácil de instalar, no tiene dependencias y puede ejecutarse de inmediato en un entorno Python, por lo que es ideal para CI y automatización de pruebas
  • Gracias a la optimización de consultas analíticas, puede ofrecer un rendimiento hasta 1,000 veces superior al de SQLite o Postgres, y permite consultar directamente varios formatos de archivo (csv, parquet, json)
  • Con una sintaxis SQL amigable (EXCLUDE, COLUMNS, QUALIFY, encadenamiento de funciones, etc.) y una API de Python, es posible desarrollar pipelines complejos de manera eficiente
  • Con cumplimiento ACID, UDF de alto rendimiento y extensiones de integración con PostgreSQL, está surgiendo como una alternativa de lakehouse para datos de escala intermedia

Resumen de DuckDB

  • DuckDB es un motor SQL en proceso enfocado en la optimización de consultas analíticas
    • Se ejecuta dentro de la aplicación sin requerir un servidor separado, y no necesita servicios externos como Postgres
    • Está especializado en operaciones masivas de joins y agregaciones, y ofrece un rendimiento de hasta 100 a 1,000 veces mayor que los motores centrados en transacciones (OLTP)
  • Uno de sus principales casos de uso es el procesamiento por lotes (batch processing) leyendo directamente desde disco archivos grandes como csv, parquet y json
  • También puede usarse para exploración ligera de datos, por ejemplo consultando un archivo CSV directamente desde la línea de comandos

Características principales

  • Velocidad

    • DuckDB es uno de los motores de procesamiento de datos de código abierto más rápidos, y se mantiene entre los mejores en benchmarks
    • Frente a Polars, DataFusion, Spark y Dask, DuckDB suele dominar con datos pequeños, mientras que Spark y Dask siguen siendo competitivos con grandes volúmenes
  • Instalación simple y sin dependencias

    • DuckDB se distribuye como un único binario precompilado, y en Python puede instalarse al instante con pip install duckdb
    • Al no tener dependencias, su instalación es mucho más simple que la de frameworks grandes como Spark
    • Combinado con uv, permite preparar un entorno Python en menos de 1 segundo
  • CI y pruebas

    • Gracias a su arranque rápido y ligereza, es muy adecuado para entornos de CI y pruebas de pipelines de datos
    • Antes, las pruebas basadas en Spark eran lentas y complejas, pero con DuckDB es más fácil simplificar la configuración del entorno y mantener consistencia con producción
  • Experiencia al escribir SQL

    • DuckDB permite escribir SQL y validar sintaxis rápidamente
    • Resulta más conveniente que el modo local de Spark o AWS Athena para ejecución inmediata y desarrollo iterativo
    • También ofrece una UI con autocompletado
  • Sintaxis SQL amigable

    • DuckDB incluye muchas extensiones SQL fáciles de usar
      • Soporta EXCLUDE, COLUMNS, QUALIFY, modificadores de agregación para funciones de ventana y encadenamiento de funciones (first_name.lower().trim())
    • Estas funciones permiten realizar selección y transformación compleja de columnas de forma concisa
  • Soporte para múltiples formatos de archivo

    • Permite consultar datos directamente desde S3, URLs web y archivos locales
    • Ofrece opciones estrictas para tipos en CSV para evitar errores causados por datos de entrada no estructurados
  • API de Python

    • En Python, se pueden definir pipelines basados en CTE paso a paso y revisar fácilmente los datos en cada etapa
      • Se pueden encadenar consultas SQL con llamadas a duckdb.sql()
      • Gracias a la ejecución diferida (lazy execution), se pueden inspeccionar resultados intermedios sin pérdida de rendimiento
    • También es posible probar funciones por etapa, lo que mejora la eficiencia de las pruebas en CI
  • Cumplimiento ACID

    • DuckDB ofrece garantías ACID completas incluso en trabajos con grandes volúmenes de datos
    • Por esta característica, puede funcionar como alternativa intermedia a formatos lakehouse como Iceberg y Delta Lake
  • UDF de alto rendimiento y extensiones de la comunidad

    • Es posible crear funciones definidas por el usuario (UDF) de alto rendimiento en C++
    • A través de Community Extensions, se pueden instalar extensiones al instante con comandos como INSTALL h3 FROM community
      • Por ejemplo: soporte para indexación hexagonal (h3) para datos geoespaciales
  • Documentación

    • Toda la documentación se ofrece en un solo archivo Markdown, lo que facilita su uso para entrenamiento de LLM o búsquedas dentro del editor de código
    • Gracias al code folding, es fácil copiar solo las partes necesarias

Uso real y resultados

  • En el proyecto de código abierto Splink, adoptar DuckDB como backend predeterminado permitió
    • reducir los problemas de los usuarios, acelerar el trabajo y simplificar el desarrollo y las pruebas de funciones

Extensiones destacadas

  • PostgreSQL Extension: permite conectar y consultar directamente bases de datos Postgres desde DuckDB
  • pg_duckdb: incrusta el motor DuckDB dentro de Postgres para combinar procesamiento transaccional y analítico
    • En el futuro, tras mejorar la optimización de índices de Postgres y el filter pushup, podría lograr una adopción amplia

2 comentarios

 
kaydash 2026-01-18

Es irónico usar parq, pensado para procesamiento distribuido, con el objetivo de procesarlo en una sola máquina.

 
GN⁺ 2026-01-18
Comentarios en Hacker News
  • Hay muchas razones por las que me gusta DuckDB
    Soporta archivos .parquet, .json y .csv, y permite lectura con glob como select * from 'tsa20*.csv', así que puedes tratar cientos de archivos como si fueran uno solo
    Incluso si el esquema es distinto, se pueden combinar fácilmente con union_by_name, y el parser de CSV asigna los tipos automáticamente bastante bien
    La versión WebAssembly pesa 2 MB y la CLI 16 MB, así que es muy pequeño
    Gracias a eso se puede incluir directamente en un producto. Por ejemplo, como Malloy
    Malloy es como una versión para técnicos de PowerBI o Tableau, pero usa un modelo semántico para ayudar a la IA a escribir mejores consultas. Se siente como si SQL fuera 10 veces más fácil de usar

    • El soporte de CSV de DuckDB cambió por completo mi forma de explorar datos
      Antes dedicaba tiempo a entender primero el esquema, pero ahora cargo los datos, escribo consultas exploratorias, valido hipótesis y repito el proceso de limpieza, transformación y creación de tablas
      Eso me permite profundizar mucho más rápido y detectar antes los callejones sin salida, reduciendo el tiempo perdido
      Escuché que hay un paper sobre cómo funciona el parser de CSV y sobre ideas para mejorarlo en el futuro, pero todavía no lo encuentro
    • Últimamente he usado mucho ClickHouse, y tiene varias ventajas parecidas a DuckDB
      En particular, la ingesta de Parquet y JSON es muy cómoda, y clickhouse-local se parece a la idea de incrustar DuckDB
      Con la sintaxis SELECT ... FROM s3Cluster(...) puedes hacer ingesta con wildcard desde un bucket de S3, y se distribuye entre los nodos del clúster
      Parece que también soporta schema_inference_mode
      ClickHouse también implementó una función similar a union_by_name
      Documentación relacionada: función s3Cluster, schema inference, PR #55892
    • Yo hice Shaper, que combina consultas y visualización de datos al estilo de las ideas de Malloy
      Pero Shaper usa SQL en vez de un lenguaje aparte
      Está basado en DuckDB y permite crear dashboards solo con SQL
      Shaper GitHub
    • Yo hice ZenQuery y uso DuckDB para el procesamiento interno
      La velocidad es sorprendente, y la detección automática de esquema funciona correctamente la mayor parte del tiempo
      Un LLM genera el SQL correcto a partir de consultas en lenguaje natural
    • Esta es una introducción realmente excelente
      Yo antes hacía imports manuales con SQLite, pero DuckDB hizo que todo fuera mucho más simple
  • Yo también soy de los que usan DuckDB todo el tiempo
    Trabajo con científicos que investigan el entorno costero de BC, y manejamos enormes volúmenes de datos, desde observaciones de glaciares hasta datos de drones de aguas profundas
    Adoptamos DuckDB como motor de una nueva herramienta de transformación de datos de biodiversidad, cuyo objetivo es convertir y validar datos según el estándar Darwin Core
    Creamos tablas de DuckDB dinámicamente en función del esquema e importamos los datos. Si falla, indica el motivo fila por fila
    La transformación y la validación también se hacen completamente dentro de DuckDB
    Gracias a eso construimos una aplicación mucho más rápida, más potente y capaz de ejecutarse también en el navegador
    Los investigadores de campo incluso pueden usarla sin conexión en el navegador de un iPad
    DuckDB me da la confianza de que SQL se encarga del trabajo pesado
    La falta de estabilidad de tipos la compensamos con parsing y pruebas
    El objetivo de este proyecto es permitir que los científicos analicen datos de biodiversidad y genómica con una herramienta común y los publiquen en repositorios públicos

    • Me da curiosidad saber en qué formato están los datasets existentes
      Yo trabajo mucho con HDF5 en procesamiento de datos científicos, pero DuckDB no lo soporta de forma nativa
      La extensión existente era lenta y limitada, así que hice una extensión nueva con plantillas de C++
      Estoy buscando gente interesada en colaborar
    • Me pregunto qué ventajas tendría usar Polars para lo mismo
      En lo personal, la sintaxis de Polars me resulta mucho más cómoda que SQL, así que no sé si vale la pena probar DuckDB
  • Nosotros hacemos el análisis y el procesamiento de feeds de Bluesky con DuckDB
    Para obtener resultados rápido usamos la interfaz de Apache Arrow y generamos código directamente desde consultas SQL de DuckDB con SQG

    • Me da curiosidad el stack técnico. Me gustaría saber si hay algún artículo sobre la arquitectura interna. La herramienta de HN también me pareció impresionante
  • Quiero mencionar el proyecto de Java manifold-sql
    Permite escribir DuckDB SQL inline con type safety
    Puedes poner SQL directamente dentro del código y recorrer los resultados con .fetch(), sin capas intermedias, lo que queda muy limpio

  • El argumento del autor es válido para procesamiento de datos básico,
    pero la parte de que “la mayoría de los datos tabulares se pueden procesar en una sola máquina” sí es discutible
    Cuando empiezas a escalar, pivotear o enriquecer datos, aparece rápido el problema de memoria agotada (OOM)
    Además, la afirmación de que “SQL debería ser la primera opción en la nueva ingeniería de datos” tampoco encaja tan bien para análisis complejos

    • Soy el autor
      Las API de dataframe como Polars o pandas también tienen muchas ventajas, pero el problema es que el ecosistema no está estandarizado y a menudo hay que reescribir pipelines
      La mayoría de los datos están por debajo de 10 GB, así que una sola máquina suele ser suficiente
      Muchas veces se usa Spark en exceso
      Mi postura es: “pruébalo primero con DuckDB”. En casos simples es rápido y eficiente
    • Para análisis avanzados como ML o visualización, los dataframe son más adecuados
      SQL es bueno para pipelines simples, pero la legibilidad depende de cada persona
      A mí me resulta mucho más fácil leer del lado de dataframe
    • SQL sigue siendo fácil de aprender, y el modelado de datos todavía se hace mayormente en SQL
      Del lado de ingesta se usa mucho Python o Scala, pero SQL no va a desaparecer
    • Estoy procesando 500 GB de datos Parquet con DuckDB, y va fluido y rápido incluso en una desktop con 50 GB de RAM
      OOM probablemente solo sea un problema en casos extremos
    • Polars también tiene la mayoría de estas ventajas, e incluso soporta GPU y backends distribuidos
      Así como DuckDB está ganando atención, Polars también está siendo subestimado
  • Yo hago bastante procesamiento de datos y uso sobre todo Polars
    Es muy rápido y tiene muchas funciones que, como en pandas, son difíciles de implementar con SQL
    También se pueden usar funciones de Python directamente
    Aunque DuckDB tuviera el mismo rendimiento, me da la impresión de que SQL tendría limitaciones expresivas, y eso me hace dudar

    • En mi experiencia, DuckDB fue mucho más rápido y conciso
      Como es standalone, instalarlo también es simple, y casi no hay tuning ni curva de aprendizaje
  • Cargué en DuckDB un archivo de Excel con formato desastroso generado por un mainframe,
    y con la opción all_varchar se cargó en menos de un segundo
    Excel todavía sigue intentando abrir el archivo

  • DuckDB es excelente, pero la carga dinámica de extensiones choca con la firma de código y hace difícil usarlo en apps comerciales
    Además, la extensión espacial usa componentes LGPL, así que hay un tema de licencias
    Estaría bueno poder combinar solo las funciones necesarias a nivel de paquete, como en Apache Arrow
    Ejemplo: para transferir arrays por HTTP a GB/s, Arrow Flight; para compartir archivos, Arrow IPC; para leer Parquet, agregar un trait aparte
    El sistema de tipos SQL de DuckDB es distinto del de Arrow, así que puede haber problemas de incompatibilidad de tipos
    Arrow ofrece librerías nativas en la mayoría de los lenguajes

  • Me pregunto si se puede consultar rápido una página filtrada con cláusulas WHERE
    en una sola tabla con decenas de miles de millones de transacciones y 30 columnas
    En Postgres incluso un simple count(*) tarda mucho

    • A esa escala, en DuckDB probablemente seguiría terminando en pocos segundos
      Los únicos casos en los que me fue lento fueron joins complejos o glob sobre muchos archivos
    • Para acelerar count, quizá convenga más cacheo periódico que índices
      Si las condiciones WHERE son pares simples columna-valor, debería resolverlo bastante rápido
  • DuckDB no es solo una base de datos rápida, también tiene una experiencia de desarrollador (devx) excelente
    Es fácil empezar, así que el ecosistema está creciendo rápido
    La integración con Web/WASM también impresiona
    Ojalá aparezcan más motores pequeños como este y continúe la competencia y la innovación