sábado, 10 de julio de 2021

MongoDB: Lenguaje SQL

MongoDB es un gestor de bases de datos NoSQL, por lo que a diferencia de las bases de datos relacionales, no utiliza el lenguaje SQL. MongoDB dispone de un lenguaje de consulta de información  propio: MongoDB Query Language (MQL).

Vamos a revisar muy brevemente las caractarerísticas de cada uno de ellos: SQL y MQL.

El lenguaje SQL permite construir sentencias para hacer todo tipo de operaciones sobre bases de datos relacionales: Crear/eliminar una BBDD, crear/modificar/eliminar tablas/indices/vistas, consultar/modificar/agregar/eliminar filas de tablas, etc.

Esto es debido a que SQL incluye: un lenguaje de definición de datos, un lenguaje de manipulación de datos y un lenguaje de control de datos.

Algunos ejemplos de sentencias SQL :

  • Crear una tabla:   CREATE TABLE jobs( 
                                     ID int,
     
                                     country varchar(255),

                                     sector varchar(255),

                                     company varchar(255),
     
                                     job_description varchar(255)

                                 );
     
  •  Consultar una tabla: SELECT company, country,source from jobs where sector="finance"

Es relativamente fácil desarrollar un programa sencillo, por ejemplo en python, para conectarse con una BBDD relacional y ejecutar sentencias SQL de cualquier tipo.

Sin embargo en MongoDB no tenemos esta flexibilidad, ya que el lenguaje MQL no se basa en sentencias, sino en comandos/instrucciones específicas para cada tipo de operación.

Por ejemplo una consulta en MQL parecida a la anterior en SQL sería:
   db.jobs.find(
        {"sector" : "finance"},
        {"company":1,"country":1,
"source":1}
   )

 
En la instrucción anterior db es la variable de la conexión a MongoDB, jobs es la colección sobre la que queremos trabajar y find  es el comando especifico para la operación que queremos realizar, en este caso una consulta con la condición sector="finance", y sólo queremos mostrar los campos company, country y source.

Para los que estamos acostumbrados a trabajar con SQL no es fácil pasar de éste a MQL, ya que las estructuras son totalmente diferentes.

Sin embargo hay una serie de herramientas que nos permiten convertir secuencias SQL en MQL:

  • Tenemos por ejemplo la página site24x7 que acepta sentencias SQL y genera el comando MQL equivalente.
  • Adicionalmente algunas aplicaciones de administración de MongoDB incluyen esta facilidad, por ejemplo NoSQLBooster.
  • La documentación en linea de MongoDB incluye una página con mapeo SQL a MQL: docs.mongodb.com
  • La herramienta MongoDB Connector for BI permite utilizar sentencias SQL para extraer información de una BBDD  MongoDB y alimentar herramientas BI como Tableau,Qlik, MicroStrategy, etc.

 





sábado, 3 de julio de 2021

MongoDB y Python GUI (tkinter)

MongoDB pertenece a los sistemas de almacenamiento de información NoSQL (Not Only SQL).

Este motor de almacenamiento es uno de los más populares cuando necesitamos administrar grandes cantidades de información con "estructura variable", es decir cuando la información está constituida por unidades que no tiene la misma estructura.

Podemos tener un colección (tabla) con documentos (filas) cuyos campos no tienen la misma estructura.
Supongamos que tenemos una colección de libros en soporte físico y electrónico. En el caso del soporte físico tal vez nos interese saber su formato : libro de bolsillo, tapa dura, etc. Esta propiedad no aplica para un libro electrónico, por lo tanto no es necesario reservar un campo para algo que no se necesita. De ahí que en este caso, la ficha de un libro físico tenga mas campos que la de un libro electrónico.

Además del tipo de información que podemos guardar,  MongoDB incluye optimizaciones como por ejemplo crecimiento horizontal, flexibilidad, búsquedas, capacidad de gestión de grandes volumenes de datos (big data), etc.

Python es una de las herramientas mas utilizadas para la gestión/análisis de datos.
Python dispone de varios módulos para trabajar con MongoDB, entre ellos está pymongo.

Supongamos que tenemos una base de datos llamada data_engineer, y en esta BBDD tenemos la colección jobs de documentos asociados a ofertas de trabajo , un script típico de conexión (asumiendo que el servidor está en el ordenador local y configurado con el puerto 27017)

 

Asumiendo que la colección jobs tiene los campos : source, date, country, sector, company, job_descripcition y job_expertice (campos donde se registra la información de cada oferta de trabajo), un script para agregar un documento en la colección sería:

Si deseamos desarrollar un programa en python con interfase gráfica tenemos a nuestra disposición diferentes módulos para tal fin. El mas veterano y con una gran cantidad de documentacion en internet es tkinter, que adicionalmente viene preinstalado en python

En la imagen siguiente tenemos un ejemplo de una aplicación gráfica sencilla que gestiona la colección jobs mencionada anteriormente:

En la siguiente imagen podemos ver un ejemplo sencillo de como visualizar las bases de datos existentes, sus colecciones y los primeros documentos de cada colección.
 

 
Desde luego, esto no deja de ser un ejemplo muy básico de lo que podemos hacer en python para comunicarnos con un servidor MongoDB. Existen aplicaciones comerciales y OpenSource muy completas para realizar la gestión de MongoDB : MongoDB Compass, NoSQLBooster, DBeaver, RazorSQL, etc.