¿Por qué DuckDB se está volviendo popular?

¿Por qué DuckDB es popular?

 

¿Qué es DuckDB?

 

DuckDB es un sistema de gestión de bases de datos integrado, gratuito y de código abierto diseñado para análisis de datos y procesamiento analítico en línea. Esto significa varias cosas:

  1. Es software gratuito y de código abierto, por lo que cualquier persona puede usarlo y modificar el código.
  2. Está integrado, lo que significa que el DBMS (sistema de gestión de bases de datos) se ejecuta en el mismo proceso que la aplicación que lo utiliza. Esto lo hace rápido y simple de usar.
  3. Está optimizado para análisis de datos y OLAP (procesamiento analítico en línea), no solo para datos transaccionales como las bases de datos típicas. Esto significa que los datos están organizados por columnas en lugar de filas para optimizar la agregación y el análisis.
  4. Admite SQL estándar para que puedas ejecutar consultas, agregaciones, uniones y otras funciones de SQL en los datos.
  5. Se ejecuta en el mismo proceso, dentro de la propia aplicación en lugar de como un proceso separado. Esto elimina la sobrecarga de comunicación entre procesos.
  6. Al igual que SQLite, es una base de datos simple basada en archivos, por lo que no se requiere una instalación de servidor separada. Solo tienes que incluir la biblioteca en tu aplicación.

En resumen, DuckDB proporciona una base de datos analítica integrada y fácil de usar para aplicaciones que necesitan capacidades de análisis de datos rápidas y simples. Cubre una necesidad de procesamiento analítico donde un servidor de bases de datos completo sería excesivo.

 

¿Por qué DuckDB se está volviendo popular?

 

Existen muchas razones por las que las empresas están construyendo ahora productos sobre DuckDB. La base de datos está diseñada para consultas analíticas rápidas, lo que significa que está optimizada para agregaciones, uniones y consultas complejas en conjuntos de datos grandes, los tipos de consultas que se utilizan a menudo en análisis e informes. Además:

  1. Es fácil de instalar, implementar y usar. No hay ningún servidor que configurar: DuckDB se ejecuta integrado en tu aplicación. Esto facilita la integración en diferentes lenguajes de programación y entornos.
  2. A pesar de su simplicidad, DuckDB tiene un conjunto de funciones completo. Admite el estándar completo de SQL, transacciones, índices secundarios e integra bien con lenguajes populares de análisis de datos como Python y R.
  3. DuckDB es gratuito para que cualquier persona lo use y modifique, lo que reduce la barrera para que los desarrolladores y analistas de datos lo adopten.
  4. DuckDB está bien probado y es estable. Tiene una extensa suite de pruebas y se integra y prueba continuamente en una variedad de plataformas para garantizar la estabilidad.
  5. DuckDB ofrece un rendimiento comparable a las bases de datos OLAP especializadas y al mismo tiempo es más fácil de implementar. Esto lo hace adecuado tanto para consultas analíticas en conjuntos de datos pequeños a VoAGI como para grandes conjuntos de datos empresariales.

En resumen, DuckDB combina la simplicidad y facilidad de uso de SQLite con el rendimiento analítico de las bases de datos columnares especializadas. Todos estos factores: rendimiento, simplicidad, funciones y licencia de código abierto, contribuyen a la creciente popularidad de DuckDB entre los desarrolladores y analistas de datos.

 

Ejemplo de DuckDB en Python

 

Probemos algunas características de DuckDB usando la API de Python.

Puedes instalar DuckDB usando Pypi:

pip install duckdb

 

Para otros lenguajes de programación, consulta la guía de instalación de DuckDB.

   

En este ejemplo, usaremos el conjunto de datos CSV de Salarios de Ciencia de Datos 2023 de Kaggle y probaremos varias funcionalidades de DuckDB.

 

API de Relación

 

Puedes cargar un archivo CSV como lo harías con pandas en una relación. DuckDB proporciona una API relacional que permite a los usuarios enlazar operaciones de consulta. Las consultas se evalúan de forma perezosa, lo que permite a DuckDB optimizar su ejecución.

Hemos cargado el conjunto de datos de salarios de ciencia de datos y mostrado el alias.

import duckdb
rel = duckdb.read_csv('ds_salaries.csv')
rel.alias

 

'ds_salaries.csv'

 

Para mostrar los nombres de las columnas, utilizaremos .columns, similar a pandas.

rel.columns

 

['work_year',
 'experience_level',
 'employment_type',
 'job_title',
 'salary',
 'salary_currency',
 'salary_in_usd',
 'employee_residence',
 'remote_ratio',
 'company_location',
 'company_size']

 

Puedes aplicar múltiples funciones a la relación para obtener resultados específicos. En nuestro caso, hemos filtrado “work_year”, mostrado solo tres columnas, y las hemos ordenado y limitado para mostrar los cinco títulos de trabajo con salarios más bajos.

Aprende más sobre Relational API siguiendo la guía.

rel.filter("work_year > 2021").project(
    "work_year,job_title,salary_in_usd"
).order("salary_in_usd").limit(5)

 

┌───────────┬─────────────────┬───────────────┐
│ work_year │    job_title    │ salary_in_usd │
│   int64   │     varchar     │     int64     │
├───────────┼─────────────────┼───────────────┤
│      2022 │ NLP Engineer    │          5132 │
│      2022 │ Data Analyst    │          5723 │
│      2022 │ BI Data Analyst │          6270 │
│      2022 │ AI Developer    │          6304 │
│      2022 │ Data Analyst    │          6359 │
└───────────┴─────────────────┴───────────────┘

 

También puedes usar Relational API para unir dos conjuntos de datos. En nuestro caso, estamos uniendo el mismo conjunto de datos cambiando el nombre del alias en un “job_title”.

rel2 = duckdb.read_csv('ds_salaries.csv')
rel.set_alias('a').join(rel.set_alias('b'), 'job_title').limit(5)

 

┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│   int64   │     varchar      │     varchar     │   │    int64     │     varchar      │   varchar    │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│      2023 │ SE               │ FT              │ ... │          100 │ US               │ L            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ SE               │ FT              │ ... │          100 │ US               │ S            │
│      2023 │ SE               │ FT              │ ... │          100 │ US               │ S            │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 filas                                                                         21 columnas (6 mostradas) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘

 

Método SQL directo

 

También existen métodos directos. Solo tienes que escribir una consulta SQL para realizar análisis en el conjunto de datos. En lugar del nombre de la tabla, escribirás la ubicación y el nombre del archivo CSV.

duckdb.sql('SELECT * FROM "ds_salaries.csv" LIMIT 5')

 

┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│   int64   │     varchar      │     varchar     │   │    int64     │     varchar      │   varchar    │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│      2023 │ SE               │ FT              │ ... │          100 │ ES               │ L            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ SE               │ FT              │ ... │          100 │ CA               │ M            │
│      2023 │ SE               │ FT              │ ... │          100 │ CA               │ M            │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 filas                                                                         11 columnas (6 mostradas) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘

 

Almacenamiento Persistente

 

De forma predeterminada, DuckDB opera en una base de datos en memoria. Esto significa que todas las tablas creadas se almacenan en memoria y no se guardan en disco. Sin embargo, utilizando el método .connect(), se puede establecer una conexión con un archivo de base de datos persistente en disco. Cualquier dato escrito en esa conexión de base de datos se guardará en el archivo en disco y se cargará de nuevo al volver a conectar al mismo archivo.

  1. Crearemos una base de datos utilizando el método .connect().
  2. Ejecutaremos una consulta SQL para crear una tabla.
  3. Utilizaremos una consulta para añadir dos registros.
  4. Mostraremos la tabla de prueba recién creada. 
import duckdb

con = duckdb.connect('kdn.db')

con.sql("CREATE TABLE test_table (i INTEGER, j STRING)")
con.sql("INSERT INTO test_table VALUES (1, 'one'),(9,'nine')")
con.table('test_table').show()

 

┌───────┬─────────┐
│   i   │    j    │
│ int32 │ varchar │
├───────┼─────────┤
│     1 │ one     │
│     9 │ nine    │
└───────┴─────────┘

 

También podemos crear la nueva tabla utilizando un archivo CSV de salarios de ciencia de datos. 

con.sql('CREATE TABLE ds_salaries AS SELECT * FROM "ds_salaries.csv";')
con.table('ds_salaries').limit(5).show()

 

┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│   int64   │     varchar      │     varchar     │   │    int64     │     varchar      │   varchar    │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│      2023 │ SE               │ FT              │ ... │          100 │ ES               │ L            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ MI               │ CT              │ ... │          100 │ US               │ S            │
│      2023 │ SE               │ FT              │ ... │          100 │ CA               │ M            │
│      2023 │ SE               │ FT              │ ... │          100 │ CA               │ M            │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 filas                                                                       11 columnas (6 mostradas) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘

 

Después de realizar todas las tareas, debes cerrar la conexión a la base de datos. 

con.close()

 

Conclusión

 

¿Por qué me gusta DuckDB? Es rápido y fácil de aprender y gestionar. Creo que la simplicidad es la principal razón por la que DuckDB se ha vuelto ampliamente utilizado en la comunidad de ciencia de datos. DuckDB ofrece una interfaz SQL intuitiva que es fácil de entender para analistas y científicos de datos. La instalación es sencilla y los archivos de la base de datos son ligeros y manejables. Todo esto hace que DuckDB sea un placer de usar.

Consulta mi artículo anterior en Deepnote sobre Ciencia de Datos con DuckDB para un análisis detallado de las características y casos de uso.

Con herramientas sólidas para la carga, gestión y análisis de datos, DuckDB ofrece una opción atractiva en comparación con otras soluciones de base de datos para la ciencia de datos. Creo que DuckDB seguirá ganando usuarios en los próximos años a medida que más profesionales de datos descubran su naturaleza fácil de usar.     Abid Ali Awan (@1abidaliawan) es un profesional certificado en ciencia de datos que adora construir modelos de aprendizaje automático. Actualmente, se centra en la creación de contenido y la redacción de blogs técnicos sobre tecnologías de aprendizaje automático y ciencia de datos. Abid tiene un máster en Gestión de Tecnología y una licenciatura en Ingeniería de Telecomunicaciones. Su visión es construir un producto de IA utilizando una red neural de grafos para estudiantes que luchan contra enfermedades mentales.  

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Limpieza con TidyBot

Un equipo multinstitucional de ingenieros acopló un brazo robótico móvil a un modelo de visión y a un gran modelo de ...

Inteligencia Artificial

Investigadores de UC Berkeley introducen Ghostbuster un método de IA SOTA para detectar texto generado por LLM

ChatGPT ha revolucionado la capacidad de producir fácilmente una amplia gama de texto fluido sobre una amplia gama de...

Inteligencia Artificial

Un caso que rima con Microsoft

La lección predominante del caso de Microsoft, según los abogados antimonopolio, es que el escrutinio de Washington p...

Inteligencia Artificial

La IA multimodal conecta los puntos digitales

Al unir múltiples componentes y flujos de datos, la IA multimodal ofrece la promesa de sistemas más inteligentes y si...

Inteligencia Artificial

Conoce DeepOnto Un paquete de Python para la ingeniería de ontologías con Aprendizaje Profundo

Los avances en metodologías de Aprendizaje Profundo están teniendo un gran impacto en la comunidad de Inteligencia Ar...