// PRJ_007 · 2023
ETL de audiencia a BigQueryAudience ETL into BigQuery
Datos · PythonData · Python
Más de 5 años de datos de audiencia de un medio digital estaban repartidos. Los junté en un solo lugar y los reportes dejaron de tomar horas.Over 5 years of a digital outlet's audience data were scattered. I brought them into one place and reports stopped taking hours.
En detalleIn detailProcesos ETL en Python que integran Universal Analytics y GA4 en BigQuery para uno de los medios digitales más grandes de Colombia. Centralizaron más de 5 años de datos históricos de tráfico y comportamiento de audiencia, y con ellos los reportes que antes tomaban horas.Python ETL processes bringing Universal Analytics and GA4 into BigQuery for one of Colombia's largest digital outlets. They centralized over 5 years of historical traffic and audience data, and with it the reports that used to take hours.
// IMPACTO// IMPACT
El problemaThe problem
Los análisis de tráfico se armaban a mano, exportando de la interfaz de Analytics cada vez. El histórico estaba repartido entre Universal Analytics y GA4, y responder una pregunta de audiencia tomaba horas.Traffic analyses were assembled by hand, exporting from the Analytics UI every time. History was split between Universal Analytics and GA4, and answering an audience question took hours.
Cómo lo resolvíHow I solved it
Escribí procesos ETL en Python que consultan ambas APIs y cargan el resultado en BigQuery con un modelo común. Con más de 5 años de histórico centralizado, los reportes pasaron a ser consultas SQL sobre una sola tabla.I wrote Python ETL processes that query both APIs and load the result into BigQuery under a common model. With over 5 years of history centralized, reports became SQL queries against a single table.
Arquitectura y stackArchitecture & stack
- [01]Universal Analytics
- [02]GA4 Data API
- [03]ETL Python
- [04]BigQuery
- [05]Reportes SQL
- Python
- BigQuery
- GA4
- SQL
Lo que aprendíWhat I learned
01 //
Dos APIs, un modelo
Lo caro no fue extraer, fue decidir cómo hacer comparables las métricas de UA y GA4.
02 //
El histórico es el activo
Cinco años de datos valen más que cualquier dashboard que se construya encima.
03 //
Backfill una sola vez
Cargar el histórico de golpe y dejar el incremental corriendo evita reprocesar para siempre.
01 //
Two APIs, one model
The expensive part wasn't extraction, it was deciding how to make UA and GA4 metrics comparable.
02 //
History is the asset
Five years of data is worth more than any dashboard built on top of it.
03 //
Backfill once
Loading history in one pass and leaving the incremental running avoids reprocessing forever.