Saltar al contenido

02 / Trabajo seleccionado

Sistema profesional

Plataforma de datos de marketing

Warehouse de paid media y analítica web multi-cliente. Nombres de cliente no publicados. Lo que sí puedo mostrar es arquitectura y decisiones de ingeniería.

BigQuery · Dataform · Incremental models · Assertions

Problema

Varias fuentes de publicidad y web tenían que aterrizar en un solo lugar que un equipo cliente pudiera usar de verdad: Google Ads, Meta Ads, GA4, APIs propias y una capa de conectores (Windsor). La pregunta nunca fue “¿podemos pegarle al API?”. Era si spend, clicks, sesiones y eventos operativos se podían modelar a un grain que alguien pudiera defender en una revisión semanal.

Restricciones

  • Los clientes no se nombran. Este texto es la arquitectura, no un trofeo con logos.
  • Varios contratos de fuente, cada uno con su frescura, identidad y forma de romperse.
  • El reporting tiene calendario. Un modelo “eventualmente correcto” después de tres restatements no sirve el lunes por la mañana.
  • El costo es parte del diseño. Un full refresh de historia publicitaria se ve simple y se vuelve el objeto más caro del proyecto.

Arquitectura

Ad / web APIsIngestBronze–GoldAnalytics
Sources in · numbers a client can use

La ingesta deja payloads crudos. Bronze los deja recuperables. Silver normaliza entidades y fechas. Gold es lo único que la analítica debería consultar. El serving es la capa de reporting sobre Gold — no una segunda copia del sistema fuente.

Decisiones y trade-offs

  • Medallion en vez de una tabla ancha. Un grain de “campañas más sesiones más todo” se ve cómodo y hace fan-out en silencio. Primero el grain; después lo incremental.
  • Dataform en BigQuery como contrato de transformación: modelos incrementales, assertions y backfills históricos como trabajo de primera clase, no un script de fin de semana.
  • El conector no es el modelo. Windsor / conectores nativos meten datos. No deciden qué significa una fila.
  • Assertions por encima del folklore del dashboard. Si el spend en Gold no reconcilia con el UI del anuncio para un día, no agrego otra métrica. Arreglo el claim.

Implementación

Trabajo que tuve o compartí en esta superficie: ingesta de las fuentes de arriba, modelado Bronze → Silver → Gold, enrichment, builds incrementales, y alinear el serving analítico con esos modelos. La topología exacta del cliente no se publica.

Resultado

Un camino de warehouse que una capa de reporting puede confiar sin joinear extracts crudos del API en la herramienta de BI. No publico porcentajes de lift ni spend bajo gestión. Esos números son del cliente.

Qué aprendí

Paid media y GA4 castigan un grain borroso más rápido que una tabla interna de ops. Restatements, conversiones tardías e identidades account vs campaign son el trabajo. La cadencia sigue a la decisión (planeación semanal vs ops del día), no a un default de cada 15 minutos.