En este mundo de los datos, todo lo que sea optimizar y mejorar tiempos en los procesos de tratamiento de datos, es de agradecer. Dentro de las herramientas que quieren ayudarnos con estas mejoras está DuckDB. En este entrada os cuento un poco qué es DuckDB y cuándo usarla. ¡Empecemos!
¿Qué es DuckDB?
DuckDB es un sistema de gestión de bases de datos SQL OLAP, desarrollado en C ++, que opera in-process; es decir, se ejecuta en memoria, embebido dentro de la aplicación o script que hace uso de esta herramienta. Para aquellos que estáis familiarizados con el uso de Bases de Datos embebidas, es como la SQLite del mundo de Data.
Al trabajar con ella de forma embebida, eliminamos todos los procesos de comunicación, y procesos separados para la gestión de datos. Esto lo hace un motor de Base de Datos muy rápido y fácil de implementar.
Ofrece la posibilidad de poder realizar consultas sobre datos de otros orígenes, sin necesidad de copiar los datos a un esquema o estructura de DuckDB. Por ejemplo, es posible realizar consultas sobre datos en Dataframes de Pandas, o realizar consultas contra un motor PostgreSQL o MySQL.
Se puede dotar de persistencia, llevando los datos a un archivo en disco local, o también, persistir este archivo en almacenamiento en Cloud como AWS S3, Azure ADLS, o de un servidor de archivos al que se acceda a través de HTTP.
Características
Vamos a ver una lista con las características principales de DuckDB, se trata de un listado a alto nivel, acerca de las posibilidades de esta herramienta:
Portable
DuckDB no tiene dependencias directas, lo que lo hace extremadamente portable. Se puede compilar para los principales sistemas operativos y arquitecturas de CPU. También puede desplegarse en dispositivos con recursos limitados, pensados para proyectos de Edge Computing o IoT. Incluso se puede ejecutar vía web, a través de DuckDB-Wasm.
Rápido
Como ya he comentado, está pensado para consultas OLAP. Estas consultas se caracterizan por ser complejas y relativamente largas, ya que procesan y operan grandes volúmenes de datos. Para soportar de forma eficaz estas tareas, es fundamental reducir la cantidad de ciclos de CPU que se utilizan por cada valor individual. Para ello, lo último en gestión de datos, son los motores de consultas vectoriales o just-in-time. DuckDB tiene un motor de ejecución de consultas vectorizado en columnas, capaz de procesar tareas sobre un gran lote de valores (un vector) en una sola operación. Esto reduce la sobrecarga presente en sistemas tradicionales, que procesan cada fila de forma secuencial.
Extensible
Permite extender sus capacidades para incluir nuevos tipos de datos, funciones, formatos de archivo y nueva sintaxis de SQL. De hecho, muchas de las características de DuckDB, como la compatibilidad con archivos Parquet, JSON, las zonas horarias y la compatibilidad con los protocolos HTTP(S) y S3, los implementa como extensiones.
Gratis
¡Esta palabra siempre suena bien! DuckDB se publica bajo la licencia MIT, es de código abierto, todo el código fuente está disponible gratuitamente en GitHub.
Casos de uso
Para mí, DuckDB es una herramienta que a acompaña el desarrollo de procesos analíticos, para simplificar el desarrollo de procesos en sí, además de darle más velocidad a estos procesos. Un uso con el que he probado esta herramienta ( ya os contaré en futuros posts), es la de utilizarlo acompañado de Pandas. De tal manera que se puede llevar los datos de un Dataframe de Pandas a DuckDB y pasar a hacer toda la operativa, cálculo y consultas de datos con SQL, en lugar de utilizar las funciones de agregación, consultas y procesado de Dataframes de Pandas. Esto hace que también facilite el incluir a personas con conocimientos de SQL, en el desarrollo de procesos analíticos sobre Python.
Los casos de uso habituales en donde creo que esta herramienta nos puede ayudar:
- Simplificar el procesamiento de información en flujos de datos, como el caso que os comentaba en este mismo punto.
- Tratamiento de información que residen en archivos como CSV, JSON, Parquet, para volcar la información sobre DuckDB y poder trabajar con SQL sobre los datos de esos archivos, reduciendo muy mucho el código a desarrollar.
- Procesado de grandes volúmenes de datos en la propia máquina, pensando sobre todo en utilizarlo como un paso intermedio, previo a llevar el dato final a un entorno sobre el que se alimentarán los Data Marts del proyecto.
- En proyectos de Edge Computing para tener capacidad de analítica de datos en los propios dispositivos de borde, facilitando la computación distribuida que busca este tipo de proyectos de computación.
Referencias
- DuckDB: https://duckdb.org/
- DuckDB características: https://duckdb.org/why_duckdb.html
- DuckDB-Wasm: https://duckdb.org/docs/api/wasm/overview.html
- DuckDB GitHub: https://github.com/duckdb
- DuckDB documentación: https://duckdb.org/docs/
