BigQuery unnest: Como desanidar los parámetros de eventos de GA4


Índice:

Después de conectar tu propiedad de GA4 con BigQuery, es momento de aprovechar los datos para realizar análisis, crear informes personalizados y diseñar dashboards interactivos.

Al acceder a la consola de BigQuery, tienes que localizar tu conjunto de datos, identificado como 'analytics_xxxxx', y la tabla correspondiente, nombrada como 'events_'. Aquí es donde se almacenan todos los eventos capturados por GA4, listos para ser consultados y analizados según tus necesidades.
 
Al hacer clic en nuestra tabla de datos, podremos ver la estructura de la misma:
01 BQ_UNNEST_Eschema
 
Al revisar el campo 'event_params', vemos que aquí se almacenan nuestros parámetros de evento, tanto nativos como personalizados. Aunque sabemos que los datos están presentes, extraerlos no es tan simple como ejecutar un 'SELECT * FROM BASE_DATOS'.

Con los parámetros normales, basta con arrastrarlos o invocarlos en el código para poder usarlos, sin embargo, los event_params no los puedes usar de esta forma, por que su estructura es diferente. Este campo contiene datos organizados en tablas dentro de otras dimensiones; es decir, son variables que están 'anidadas'.
 

¿Cómo desanidar (unnest) los parámetros de evento?

Para desanidar esta dimensión y acceder a la información, debemos que utilizar una sentencia SQL como esta:

/*UNNEST EVENT PARAMS*/
SELECT
(select value.string_value
from unnest(event_params)
where key = 'NOMBRE_DE_VARIABLE') AS NOMBRE_VARIABLE_UNNESTED
FROM `TU_BASE_DATOS`

 
Esta sentencia funciona de la siguiente manera:

Con 'SELECT value.string_value', indicamos que queremos extraer el valor de la dimensión (value) y que este valor es de tipo texto (string_value). BigQuery almacena los valores en cuatro tipos diferentes:
  • string_value: Datos almacenados como texto.
  • int_value: Números enteros.
  • float_value: Números con hasta dos decimales.
  • double_value: Números con más de dos decimales.
Si el dato que queremos extraer es de tipo número entero, tendríamos que cambiar string_value por int_value.

La cláusula 'FROM UNNEST(event_params)' indica que queremos extraer el valor seleccionado de event_params. Como esta tabla está anidada, utilizamos la función UNNEST para desanidar los event params y obtener el valor deseado.

Finalmente, con 'WHERE key = 'NOMBRE_DE_VARIABLE', especificamos qué dimensión queremos obtener. Por ejemplo, si queremos extraer la URL de la página, escribiríamos: WHERE key = 'page_location'.

Con esta sentencia, ya podemos acceder a los datos de los parámetros de los eventos y aprovechar la información almacenada en BigQuery a partir de GA4.
 

¿Qué sucede sí elijo un value incorrecto?

 
Por ejemplo, quiero sacar un valor que es un numero entero, como un id de producto, pero en lugar de escribir 'SELECT value.int_value' escribo 'SELECT value.string_value'.

S​i ejecuto el código, se ejecutará sin errores, pero no obtendremos ningún resultado porque estamos intentando extraer datos de una columna incorrecta.

Al buscar en una columna que no corresponde al tipo de dato almacenado, la query no devolverá los resultados esperados.

​Es muy importante saber que estamos seleccionando la columna adecuada en función del tipo de dato que queremos extraer.​
 

¿Qué sucede si en una variable tengo varios tipos de datos?

 
Puede ser frecuente que en una variable almacenes un dato que tu consideres siempre de un tipo, pero al insertarlo en Big Query, este interprete que se trata de otro tipo de dato.

Por ejemplo, con el modelo de un coche:

Un 'Peugeot 307' y un 'Audi Q3', los almacenará de forma distinta, ya que '307' lo va a interpretar como un value.int_value, mientras que 'Q3' lo va a considerar un value.string_value.


Si en la sentencia para desanidar elijo un tipo de value dejo fuera al otro.

Este tipo de discrepancia puede afectar el análisis de datos si no se maneja adecuadamente.​
 

¿Cómo resuelvo estos inconvenientes?

 
Resolver estos dos inconvenientes es más sencillo de lo que puede parecer en un primer momento.

​Hay diferentes formas de resolverlo, pero una muy eficaz es la siguiente:

/*UNNEST ALL VALUES FROM EVENT PARAMS*/
 
(select COALESCE(
value.string_value,
cast(value.int_value as string),
cast(value.double_value as string),
cast(value.float_value as string))
from unnest(event_params)
where key = 'NOMBRE_DE_VARIABLE') AS NOMBRE_VARIABLE_UNNESTED

 
Este código utiliza varias sentencias.
  • COALESCE: se utiliza para devolver el primer valor no NULL de una lista de expresiones.
  • CAST: se utiliza para convertir un valor de un tipo de datos a otro.

​Con 'CAST' convertimos todos los valúes en valores de tipo 'string' y con 'COALESCE' cogemos el valor que no sea nulo. De esta forma sea cual sea el tipo de valor que contenga nuestra dimensión, lo extraeremos siempre.
 
Como hemos visto, gran parte de la información de GA4 en BigQuery esta dentro del campo 'event_params', pero como esta anidado, para utilizarlo necesitamos una sentencia un poco mas compleja de lo habitual. Como hemos visto hay algunos aspectos a tener en cuenta pero con las soluciones aportadas, podrás resolver estos inconvenientes y acceder a tus datos de forma sencilla, coherente y sin errores.

Después de saber como desanidar los event_params, tenemos que conocer que valores pueden tomar las diferentes variables dentro deevent_params. Para ello puedes consultar este articulo: BigQuery: como consultar que parámetros hay dentro de un campo anidado. Otra función muy importante para todo Analista Digital es saber como programar consultas con BigQuery, aprende a hacerlo en este articulo.

David Hernández

Digital Analyst


Soy un apasionado de los datos, la tecnología, la ciencia y el aprendizaje continuo.

Trabajo como Digital Analyst desde 2020.

Participo en el ciclo completo de los datos: definición e implementación de recolección, procesado y distribución, análisis de datos y reporting.

Submit Your Comment