¿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

Apple entra en la competencia de la IA generativa con el chatbot 'AppleGPT

El gigante tecnológico Apple sigue adelante con su esperado chatbot impulsado por IA, tentativamente llamado “A...

Inteligencia Artificial

Nvidia está probando una IA generativa para sus ingenieros

Bill Dally de Nvidia dijo que la empresa está probando si puede aumentar la productividad de sus diseñadores de chips...

Inteligencia Artificial

Escala el entrenamiento y la inferencia de miles de modelos de aprendizaje automático con Amazon SageMaker

Entrenar y servir miles de modelos requiere una infraestructura robusta y escalable, y ahí es donde Amazon SageMaker ...

Inteligencia Artificial

Esta investigación de IA comparte una visión general exhaustiva de los modelos de lenguaje grandes (LLM) en grafos.

Los conocidos Modelos de Lenguaje Grandes (LLMs, por sus siglas en inglés) como GPT, BERT, PaLM y LLaMA han logrado g...