miércoles, 25 de septiembre de 2019

Conectando Google BigQuery desde MuleSoft

Este articulo explicará los pasos y las configuraciones a seguir para conectarnos a Google BigQuery desde MuleSoft, usando el conector de Base de Datos.

BigQuery es un almacén de datos en la nube, altamente escalable y rentable, con un motor de BI en memoria y machine learning integrado.

Mulesoft es un framework de mensajería ESB (Enterprise Service Bus) escalable y distribuible que puede manejar interacciones con servicios y aplicaciones que usan distintas tecnologías de transporte y mensajería.


CONFIGURAR UNA CUENTA DE GOOGLE

Lo primero que haremos es configurar una cuenta de Google para poder usar BigQuery, entramos a la siguiente liga http://console.cloud.google.com y accedemos con nuestra cuenta de Google.


En el menú de la parte izquierda seleccionaremos las opciones IAM y administración -> Cuentas de servicio y crearemos un proyecto pulsando el enlace CREAR.

Ingresamos el nombre del proyecto: BigQuery, y pulsamos el botón CREAR.
                                


Crearemos una cuenta de servicio pulsando el botón + CREAR CUENTA DE SERVICIO.

Ingresaremos el nombre: mulesoft, y pulsaremos el botón CREAR.

Nos solicitará los permisos/rol que le otorgaremos a esta cuenta, seleccionaremos Administrador de BigQuery y pulsaremos el botón CONTINUAR.

El siguiente paso es la creación de la clave privada, seleccionamos JSON y pulsamos el botón CREAR.

Crearemos una carpeta (Mulesoft_Bigquery) de preferencia en el escritorio, para guardar el archivo de clave y demás archivos que usaremos posteriormente.

El archivo de clave contendrá los campos: project_id y client_email, entre otros, los cuales usaremos más adelante para configurar la conexión.

Ahora en el menú principal seleccionaremos la opción BigQuery.

En la parte izquierda seleccionamos nuestro Id de proyecto (bigquery-253315) y pulsamos el botón CREAR CONJUNTO DE DATOS.

Ingresamos el ID: usuarios, y pulsamos el botón Crear conjunto de datos.

En la parte izquierda de la pantalla expandimos bigquery-253315 -> usuarios, y pulsamos el botón CREAR TABLA.

Ingresamos el nombre de la tabla: usuarios, y agregamos los campos como se muestran en la imagen: id, nombre, apellido_paterno, apellido_materno, edad y genero. Pulsamos el botón Crear tabla.

Con el Editor de Consultas podremos ejecutar select * from usuarios.usuarios para validar la existencia de la tabla, donde usuarios.usuarios hace referencia a Conjunto de Datos.Tabla

Si queremos agregar información a la tabla usando insert into usuarios.usuarios values ("1", 'Luis Alberto', 'Juarez', 'Juanico', 33, 'masculino') nos aparecerá el error: Billing has not been enabled for this Project.

Para solucionar este problema entramos a la URL que nos indica el mensaje de error (https://console.cloud.google.com/billing) y pulsamos el botón Añadir cuenta de facturación.

Ingresamos los datos de facturación que se solicitan (nombre, dirección, tarjeta de débito/crédito, etc.) y pulsamos el botón de Iniciar prueba gratuita.

De vuelta en el Editor de Consultas, pulsamos el botón ACTUALIZAR que se encuentra en la parte superior derecha de la pantalla, con esto ya podremos ejecutar el insert.







DESCARGAR JDBC DRIVERS DE GOOGLE BIGQUERY

Entramos a la URL: 
https://cloud.google.com/bigquery/providers/simba-drivers/ y pulsamos el link JDBC 4.2-compatible. Guardamos el archivo en nuestra carpeta Mulesoft_Bigquery.

Descomprimimos el archivo SimbaJDBCDriverforGoogleBigQuery42_1.2.1.1001.zip y el contenido será similar a como se muestra a continuación.


CREAR FLUJO EN ANYPOINTSTUDIO

Abrimos AnypointStudio y creamos un nuevo proyecto con el nombre BigQuery.

Arrastramos nuestro archivo de clave bigquery-253315-79479f43a3c4.json a nuestro proyecto Mule en la carpeta src/main/resources. Seleccionamos la opción Copy files y pulsamos el botón OK.


Ahora necesitaremos la ubicación local de este archivo en nuestro proyecto. Para esto pulsaremos el botón derecho sobre el archivo json y elegiremos la opción Properties. Copiaremos la ubicación ya que la necesitaremos más adelante, debe ser algo similar a:
C:\Users\Luis\AnypointStudio\workspace\bigquery\src\main\resources\bigquery-253315-79479f43a3c4.json



Agregaremos el archivo de clave al path pulsando el botón derecho sobre el archivo y seleccionando la opción Build Path -> Add to Build Path.

Ahora debemos ejecutar los mismos pasos para todos los archivos jar contenidos en la carpeta que descomprimimos SimbaJDBCDriverforGoogleBigQuery42_1.2.1.1001, seleccionamos y arrastramos todos los archivos jar a la carpeta src/main/resources, eligiendo la opción Copy files.

Agregamos esos archivos jar la Build Path pulsando el botón derecho y seleccionando del menú las opciones Built Path -> Add to Build Path.

Veremos que los archivos jar se mueven a la carpeta llamada Referenced Libraries.

Ahora construiremos un flujo que se conectará a BigQuery y consulte los registros de la tabla usuarios. Para esto arrastraremos un conector HTTP a nuestra área de trabajo y pulsamos el símbolo + (Add) frente al campo Connector Configuration para agregar la configuración de nuestro HTTP Listener, dejamos los valores por default (Host: All Interfaces [0.0.0.0] y Port: 8081). Este conector será la interfaz expuesta/servicio que consumiremos más adelante.

Seleccionamos el conector HTTP y configuramos los campos Path: /read, Allowed Methods: GET

Abrimos el archivo mule-app.properties y agregamos las propiedades: project_id, client_email, pvt_key_path y driver_class_name= com.simba.googlebigquery.jdbc42.Driver

Recordemos que los valores de project_id y client_email los obtendremos de nuestro archivo clave json.
El valor para pvt_key_path es la ubicación del archivo clave que obtuvimos anteriormente (C:/Users/Luis/AnypointStudio/workspace/bigquery/src/main/resources/bigquery-253315-79479f43a3c4.json)

Nota: Debemos cambiar las diagonales invertidas “\” por diagonales hacia adelante “/”.

Ahora agregamos un conector de Base de Datos y pulsamos el símbolo + (Add) frente al campo Connector configuration. Seleccionamos Generic Database Configuration y pulsamos el botón OK.


En el campo URL colocaremos la siguiente cadena:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;OAuthType=0;ProjectId=${project_id};OAuthServiceAcctEmail=${client_email};OAuthPvtKeyPath=${pvt_key_path};

En el campo Driver Class Name colocaremos el texto: ${driver_class_name}

Donde:


  OAuthType=0, indica que el driver usara autenticación service-based.
  ProjectId=${project_id}, se llenará con el valor de la propiedad project_id definida en el archivo de propiedades.
 OAuthServiceAcctEmail=${client_email}, se llenará con el valor de la propiedad client_email definida en el archivo de propiedades.
 OAuthPvtKeyPath=${pvt_key_path}, se llenará con el valor de la propiedad pvt_key_path definida en el archivo de propiedades.

Pulsamos el botón Test Connection para probar la conexión hacia BigQuery, nos mostrara un mensaje de éxito. Pulsamos los botones OK para cerrar estos mensajes.

Dentro de la configuración del conector de Base de Datos seleccionaremos Operation: Select, Type: Dynamic y Dynamic query: select * from usuarios.usuarios

Al final de nuestro flujo colocaremos un Transform Message, para transformar el resultado de la Base de Datos de Java a json.


%dw 1.0
%output application/json
---
payload


Pulsamos el botón derecho dentro del área de trabajo y seleccionamos la opción Run project bigquery.

Validamos que en la consola se muestre el mensaje de despliegue correcto.


Desde Postman probaremos el servicio enviando una petición GET: http://localhost:8081/read
Veremos que la respuesta es el contenido de la tabla usuarios.

De igual forma podríamos implementar las operaciones de Insert, Update o Delete sobre la tabla.



CONCLUSIÓN

Como pudimos observar, la configuración de la conexión hacia Google BigQuery es relativamente sencilla usando el conector a Base de Datos que proporciona Mulesoft junto con el driver JDBC propio de BigQuery. Con esto podemos crear nuestra propia API y exponer las funcionalidades específicas que necesitemos realizar sobre la Base de Datos.

No hay comentarios.:

Publicar un comentario

Oracle Autonomous Database Gratis

Recientemente Oracle anuncio la disponibilidad de su Autonomous Database gratis de por vida, por lo cual me di a la tarea de ver si realm...