Google BigQuery
Google BigQuery es un data warehouse *serverless. *En esencia, es una base de datos SQL, externa a la infraestructura que se suele llevar en nuestros proyectos, y está diseñado para funcionar con grandes volúmenes de datos. Sus integraciones son súper sencillas, por lo que permite tener soluciones para analytics rápidamente.
¿Cuando/por qué usar BigQuery?
Podríamos considerar usar BigQuery en un proyecto en los siguientes casos:
Se tiene mucha información transaccional, a la que se quiere tener acceso para hacer analytics.
Se quieren aprovechar herramientas que tengan una fácil integración con big query (como data studio)
Se quiere evitar sobrecargar la base de datos operacional con consultas para analytics que pueden ser pesadas.
Si el producto es B2B podría ser buena idea tener una base de datos individual para cada cliente, que incluya la información relacionada con su empresa y se le pueda facilitar al cliente para que pueda integrar con las herramientas de BI que estime convenientes.
Esto ya que las ventajas de usar Google BigQuery son:
Manejar grandes volúmenes de datos con alta velocidad.
Acceder a una interfaz en la consola de Google Cloud que permite hacer consultas usando SQL
Integrarse con herramientas de analytics y BI de manera sencilla (como por ejemplo Google DataStudio).
Al utilizar una base de datos externa para analytics podemos evitar la carga que implicaría sobre nuestra base de datos en heroku las consultas que se requieran para obtener estadísticas más complejas.
¿Cómo la usamos?
Instalación
Creación de un proyecto en la consola de Google Cloud
El primer paso para integrarse con BigQuery es tener un proyecto creado en la consola de Google Cloud.
https://cloud.google.com/resource-manager/docs/creating-managing-projects
Creación de credenciales para acceder a BigQuery via api.
Para usar la gema de BigQuery, necesitaremos una serie de credenciales que se generan creando una *Service Account *en google cloud. Debemos asegurarnos de darle permisos de BigQuery a la cuenta de servicio creada.
https://cloud.google.com/iam/docs/creating-managing-service-accounts
Posteriormente, debemos generar una key nueva para esa cuenta de servicio. Debe ser una key de tipo JSON.
https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating
Con estos pasos, estamos listos para comenzar a configurar BigQuery en nuestro proyecto de rails.
Uso básico
Setup de la gema
Debemos agregar la gema google-cloud-bigquery
al gemfile.
Esta gema, automáticamente obtiene las credenciales de una variable de entorno llamada BIGQUERY_CREDENTIALS
, por lo que para usarla debemos agregar esa variable, cuyo valor tiene que ser la key que descargamos en el archivo JSON.
Debe verse algo así:
En el lugar donde se va a usar la gema (probablemente un client), se debe hacer un require 'google/cloud/bigquery'
y crear un objeto Google::Cloud::Bigquery.new
. Esto obtiene las credenciales definidas en la variable de entorno automáticamente.
Tipos de recursos
En BigQuery manejaremos principalmente 2 tipos de recursos, datasets y tablas.
Un dataset esta contenido dentro de un proyecto (el que usamos se define por las credenciales), y se usa para organizar y controlar acceso a tablas y vistas.
Una tabla es lo que contiene las filas de datos que le enviaremos a BigQuery, siempre está contenido dentro de un dataset.
Dependiendo del uso, podemos tener múltiples datasets, un solo dataset, múltiples tablas o una sola tabla.
https://cloud.google.com/ruby/docs/reference/google-cloud-bigquery/latest/index.html#creating-datasets-and-tables
**Sobre la **desnormalización
En BigQuery no se busca mantener un esquema de base de datos que replique exactamente la que tenemos en nuestro servidor. Esto es porque las bondades de BigQuery son mejor aprovechadas si los datos con los que trabajamos están denormalizados.
No obstante, BigQuery ofrece algunas soluciones para esto de manera que no sea tan complicado realizar el proceso de desnormalización.
Ejemplo
En nuestros proyectos probablemente vamos a tener un cliente, un módulo de util que nos permita conocer el schema de la tabla y cómo desnormalizar un record, y unos cuantos jobs para la creación de datasets, creación de tablas e inserción de datos. Además, necesitaremos agregar un callback al observer del modelo que queremos registrar en bigquery.
💡 Para los siguientes ejemplos, supongamos que tenemos una app para realizar encuestas de cualquier tipo.
Cliente
**Módulo para mantener el schema y obtener los atributos de cada **Answer
Job para crear un dataset
Job para crear una tabla
Job para subir una answer a BigQuery
Observer
Recursos útiles
https://cloud.google.com/bigquery/docs/introduction
https://github.com/googleapis/google-cloud-ruby/tree/main/google-cloud-bigquery
Última actualización