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.
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.
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.
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.
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.
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.
De igual forma podríamos implementar las operaciones de Insert, Update o Delete sobre la tabla.
CONCLUSIÓN
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.
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.jsonAgregaremos 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)
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.