viernes, 3 de septiembre de 2021

MongoDB y API de Amadeus (2)

En la entrada anterior vimos un ejemplo de como enlazar la API de Amadeus con MongoDB.

En esta entrada presento un sencillo programa en python-tkinter que permite buscar vuelos en Amadeus estableciendo varios parámetros, guardar la información en una colección de MongoDB y luego hacer consultas a esta colección.

El programa dispone de tres pestañas:

En la primera pestaña hacemos la búsqueda en Amadeus estableciendo los parámetros de los vuelos:

 

Una vez que tenemos los vuelos en MongoDB, podemos hacer consultas estableciendo varios criterios, en este caso un rango de precios:

Por último, en la tercera pestaña podemos hacer consultas mediante secuencias MQL:


A continuación el programa en python:


domingo, 1 de agosto de 2021

MongoDB y API de Amadeus

Si uno ya tiene experiencia en RDBSM, una pregunta razonable sería: ¿para que complicarme con una BBDD NoSQL?

En este artículo presento un ejemplo de uso de MongoDB para resolver rápidamente una necesidad específica.

La empresa Amadeus dispone de una API para desarrolladores que permite hacer diferentes tipos de consultas relacionadas con los sectores de aerolíneas, hoteles, etc.

Un ejemplo de consulta a esta API es: amadeus.shopping.flight_offers_search.get()

Esta llamada permite consultar los vuelos disponibles para una ruta y fecha determinadas. La informacion devuelta está en formato JSON.

En el script Python adjunto podemos ver lo fácil que es hacer la llamada a la API e insertar la información devuelta en la colección Amadeus.flight_offers.

 
No hay necesidad de procesos previos para crear la BBDD ni la colección. Tampoco necesitamos saber la estructura de la información, sólo la insertamos directamente en MongoDB.

 
Una vez que tenemos la colección creada, podemos hacer las consultas que queramos.

En el ejemplo mostrado en la pantalla siguiente, consultamos los vuelos con precio menor a 150€ y sólo nos interesa que nos muestre los campos aerolínea, precio, duración del vuelo y aeropuerto de salida de cada segmento del vuelo:

Hemos encontrado 15 vuelos que cumplen los criterios de la consulta.

Como podemos ver, una solución realmente rápida y eficiente.

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.

domingo, 29 de noviembre de 2015

Compiladores Fortran

Tomando en cuenta que Fortran es uno de los lenguajes de programación de alto nivel más antiguos y que su desarrollo y uso se mantiene, es razonable que existan varios compiladores disponibles, tanto OpenSource como Comerciales.

Una lista parcial podría ser la siguiente:
  • gfortran : Es el fortran de gnu-gcc (2003) basado en los estandares fortran 90/95/2003/2008. Un desarrollo alternativo a g95 de Andrew Vaught. Su desarrollo se mantiene como parte del proyecto gnu-gcc.
  • g95 : Compilador desarrollado a partir del año 2000 por Andrew Vaught y basado en gnu-gcc. En el año 2002 dejó de ser un proyecto colaborativo, dando inicio en el año 2003 al desarroloo de gfortran. Su principal desarrollador abandonó el proyecto y desde el año 2012 se ha mantenido sin actualizaciones.
  • g77 : Primer compilador fortran basado en gnu-gcc con el estandard Fortran-77. Su desarrollo se detuvo antes de la versión gcc 4.0. Fué sustituido por gfortran.
  • Ifortran  (Comercial): Compilador de Intel. Según la opinión generalizada es el compilador fortran mas eficiente en la actualidad .
  • PathScale (Comercial)
  • PGI  (Comercial)
  • FTN95 (Comercial)

jueves, 26 de noviembre de 2015

Fortran, ese viejo desconocido

Como estudiante de Ingeniería Electrónica me tocó  tomar un curso de Cálculo Numérico, cuyo objetivo (asumo) era que los futuros ingenieros tuviesen  una idea básica de lo que es un lenguaje de programación y además que pudiesen adquirir conocimientos y métodos de programación.
No voy a decir en que año fué , pero si  puedo decir que el lenguaje utilizado era FORTRAN IV (en mayúsculas).
Han pasado muchos años desde entonces y por cosas de la vida la mayor parte de mi época profesional ha sido no como Ingeniero Electrónico si no como Ingeniero de Sistemas.
A lo largo de estos años he programado en diferentes lenguajes: assembler, turbo pascal, foxpro, delphi, multibase, php, perl, etc, sin embargo no había vuelto a tener ningún contacto con FORTRAN.
Sinceramente tenía la idea de que era un lenguaje muerto, algo asi como el latín ...
Y para mi sorpresa no sólo está vivo y goza de buena salud, sino que hoy en día este lenguaje a cambiado tanto que ya ni se escribe como antes , ahora es Fortran !!!

Al leer un artículo sobre supercomputación quedé sorprendido de que el autor afirmaba que algo asi como el 50% del código que se ejecuta en los superordenadores de hoy en día (clusters) corresponde a Fortran, y no solo eso, hay  librerias que tienen mas de 30 años usándose (por ejemplo LAPACK o alguna de sus descendientes).
Esta "revelación" me hizo investigar mas sobre el tema y lo cierto es que el Fortran actual es muy diferente al que yo estudié, es un lenguaje muy fácil de aprender (casi un super basic), actualizado con las prestaciones de lenguajes "modernos"  y conservando su característica original : muy eficiente para cálculos numéricos.
Como suele ocurrir con casi  todos los lenguajes de programación actualmente, existen muchas implementaciones del mismo , tanto comerciales como OpenSource, y con versiones para casi todos los sistemas operativos. 
Decidí instalar en mi ordenador el gfortran, una de las versiones OpenSource mas populares.
Confieso que quedé impresionado al compilar programas y librerias de hace mas de 30 años y no solo no ver ningún error de compilación, sino que además los programas se ejecutaban correctamente !!!
Eso si es compatibilidad ...
Y asumo que ahí radica una de las principales razones por las  que este viejo desconocido esté vivo y goce de buena salud.
Larga vida al Fortran !!!