Logo GCP con Eduardo

GCP con Eduardo

BigQuery ML Tutorial en Español: Machine Learning con SQL y Dataform
✦ Guía Técnica & Arquitectura

BigQuery ML Tutorial en Español: Machine Learning con SQL y Dataform

BigQuery ML permite llevar Machine Learning al mismo entorno donde ya viven tus datos analíticos: BigQuery. En lugar de construir un pipeline que extraiga terabytes hacia una plataforma externa, podemos preparar features, entrenar modelos, evaluarlos y generar predicciones utilizando SQL. La diferencia entre una demo y una arquitectura empresarial está en cómo diseñamos el pipeline, controlamos el coste y automatizamos su ejecución.

En este tutorial de Machine Learning con SQL en BigQuery construiremos un patrón reproducible y orientado a producción, incorporando Dataform para gobernar las transformaciones y separar correctamente datos, features, entrenamiento y scoring.

Lo que aprenderás

Diseñar un dataset de entrenamiento reproducible directamente en BigQuery.
Entrenar y evaluar modelos de Machine Learning utilizando SQL.
Usar Dataform para versionar transformaciones y dependencias.
Evitar errores de costes, leakage, particionado y scoring en producción.
Google BigQuery BigQuery ML Dataform Google Cloud SQL Machine Learning Feature Engineering ELT

¿Qué es BigQuery ML?

BigQuery ML es el enfoque de Machine Learning integrado en el ecosistema analítico de BigQuery. Su principal ventaja arquitectónica es sencilla: los datos y el entrenamiento pueden permanecer en el mismo motor analítico.

Esto cambia radicalmente el diseño de determinados proyectos. En un pipeline tradicional, podríamos extraer datos desde el Data Warehouse, convertirlos a DataFrames, transferirlos a una plataforma de entrenamiento y posteriormente devolver las predicciones al sistema analítico.

Con BigQuery ML, una parte importante de ese movimiento desaparece. SQL puede utilizarse para seleccionar observaciones, construir variables, entrenar el modelo, evaluar sus métricas y ejecutar predicciones.

Decisión arquitectónica: BigQuery ML no pretende sustituir cualquier framework de Machine Learning. Su valor aparece especialmente cuando el dataset ya está en BigQuery y el problema puede resolverse eficientemente con los modelos y capacidades disponibles dentro de BigQuery ML.

Matriz de decisión: ¿BigQuery ML o Machine Learning externo?

La decisión no debe basarse en qué herramienta tiene más funcionalidades, sino en dónde están los datos, qué modelo necesitamos y cuál es el coste operacional de mantener el pipeline.

Patrón Latencia Consistencia Coste operativo Cuándo utilizarlo
BigQuery ML Media / batch Alta sobre datos analíticos Bajo / medio Modelos tabulares, forecasting y problemas donde los datos ya están en BigQuery.
Python + framework ML Variable Depende de la arquitectura Medio / alto Algoritmos especializados, procesamiento personalizado o experimentación avanzada.
Plataforma ML gestionada Batch / online Alta con arquitectura adecuada Medio / alto Model serving, MLOps avanzado, endpoints y ciclos de vida complejos.
Dataform + BigQuery ML Batch Alta Bajo / medio Casos donde se necesita combinar transformación SQL, dependencias y Machine Learning.

Arquitectura recomendada: Dataform + BigQuery ML

Una arquitectura robusta separa claramente el dato fuente, las transformaciones, las features, el entrenamiento y las predicciones. No conviene convertir una única consulta SQL gigante en todo el pipeline de Machine Learning.

01

Datos fuente

Tablas raw o curated procedentes de sistemas transaccionales, APIs, eventos, aplicaciones o procesos de ingestión.

  • Particionado
  • Clustering
  • Calidad del dato
02

Feature engineering

Construcción de variables utilizando SQL. Esta capa debe ser determinista, versionable y reproducible.

  • Agregaciones temporales
  • Variables categóricas
  • Control de leakage
03

Modelo

BigQuery ML utiliza SQL para crear el modelo y almacenar su definición dentro del entorno de BigQuery.

  • CREATE MODEL
  • Evaluación
  • Predicción

Antipatrones: cómo disparar el coste de BigQuery ML

Error crítico: entrenar sobre más datos de los necesarios

Uno de los errores más habituales consiste en construir el dataset de entrenamiento mediante múltiples joins y funciones sobre tablas enormes sin controlar particiones, cardinalidad ni volumen final.

El problema no es únicamente económico. Una explosión de cardinalidad puede producir un dataset de entrenamiento incorrecto y degradar la calidad del modelo.

La solución es aplicar una estrategia de ingeniería de datos antes de entrenar: filtrar temporalmente, seleccionar únicamente las columnas necesarias, controlar la cardinalidad de los joins y utilizar tablas intermedias materializadas cuando aporten valor operativo.

Regla FinOps: antes de optimizar el algoritmo, optimiza el dataset. En Machine Learning a escala, reducir un dataset de entrenamiento innecesariamente grande puede tener más impacto que microoptimizar el SQL del modelo.

Implementación práctica: Machine Learning con SQL en BigQuery

El siguiente ejemplo utiliza regresión logística para predecir si una entidad pertenece a una clase determinada. El patrón es deliberadamente modular: primero construimos features, después creamos el modelo y finalmente generamos predicciones.

bigquery_ml.sql SQL
-- ============================================================
-- 1. Dataset de features
-- ============================================================

CREATE OR REPLACE TABLE `project.analytics.ml_features` AS

SELECT
  customer_id,

  -- Variables numéricas
  COUNTIF(event_type = 'purchase') AS purchases,
  SUM(revenue) AS total_revenue,
  AVG(session_duration) AS avg_session_duration,

  -- Variable temporal
  DATE_DIFF(
    CURRENT_DATE(),
    MAX(event_date),
    DAY
  ) AS days_since_last_event,

  -- Variable objetivo
  MAX(CASE
    WHEN churned = TRUE THEN 1
    ELSE 0
  END) AS label

FROM `project.analytics.customer_events`

GROUP BY customer_id;


-- ============================================================
-- 2. Entrenamiento del modelo
-- ============================================================

CREATE OR REPLACE MODEL `project.ml.customer_churn_model`

OPTIONS (
  model_type = 'LOGISTIC_REG',
  input_label_cols = ['label']
) AS

SELECT
  purchases,
  total_revenue,
  avg_session_duration,
  days_since_last_event,
  label

FROM `project.analytics.ml_features`;


-- ============================================================
-- 3. Evaluación
-- ============================================================

SELECT *
FROM ML.EVALUATE(
  MODEL `project.ml.customer_churn_model`,
  (
    SELECT
      purchases,
      total_revenue,
      avg_session_duration,
      days_since_last_event,
      label
    FROM `project.analytics.ml_features`
  )
);


-- ============================================================
-- 4. Predicción
-- ============================================================

SELECT
  customer_id,
  predicted_label,
  predicted_label_probs

FROM ML.PREDICT(
  MODEL `project.ml.customer_churn_model`,
  (
    SELECT
      customer_id,
      purchases,
      total_revenue,
      avg_session_duration,
      days_since_last_event
    FROM `project.analytics.ml_features`
  )
);

Dataform Google Cloud: convertir SQL en un pipeline mantenible

Si el objetivo es construir un proyecto empresarial, ejecutar SQL manualmente no es suficiente. Necesitamos controlar dependencias, versiones, materializaciones y validaciones. Ahí es donde Dataform encaja especialmente bien con BigQuery.

Una estrategia limpia consiste en separar el proyecto en diferentes capas. Por ejemplo, podemos tener una tabla de eventos normalizados, otra tabla con las features y posteriormente una relación lógica con el proceso de Machine Learning.

El principio fundamental es que el modelo no debería depender de una consulta improvisada ejecutada desde la consola. Las transformaciones que generan las features deben estar versionadas como código.

definitions/ml_features.sqlx Dataform
config {
  type: "table",
  schema: "ml",
  name: "customer_features",
  description: "Features utilizadas por el modelo de churn"
}

SELECT
  customer_id,

  COUNTIF(event_type = 'purchase') AS purchases,

  SUM(revenue) AS total_revenue,

  AVG(session_duration) AS avg_session_duration,

  DATE_DIFF(
    CURRENT_DATE(),
    MAX(event_date),
    DAY
  ) AS days_since_last_event,

  MAX(
    CASE
      WHEN churned = TRUE THEN 1
      ELSE 0
    END
  ) AS label

FROM ${ref("customer_events")}

GROUP BY customer_id

El beneficio no está simplemente en sustituir una consulta SQL por un fichero SQLX. El verdadero valor aparece cuando Dataform se convierte en la capa de transformación: las dependencias quedan explícitas, los cambios se revisan mediante control de versiones y el dataset de features se convierte en un artefacto reproducible.

Patrones de diseño y mejores prácticas

Separar entrenamiento y scoring

No mezcles en la misma transformación la generación de features, entrenamiento y consumo del modelo. Cada fase tiene diferentes necesidades operativas.

Evitar data leakage

Una feature sólo puede utilizar información disponible en el momento en que se habría realizado la predicción. Las variables futuras pueden producir métricas artificialmente altas.

Particionar correctamente

Diseña las tablas de entrada pensando en el patrón real de consulta. El particionado temporal y el clustering pueden reducir el volumen procesado.

Versionar features

Una feature es parte del producto de datos. Debe tener una definición reproducible, trazabilidad y una estrategia clara para modificarla.

Validar antes de entrenar

Controla nulos, cardinalidad, rangos, distribución de variables y proporción entre clases antes de consumir el dataset de entrenamiento.

Medir más allá del accuracy

La métrica correcta depende del problema. En clasificación puede ser necesario analizar precision, recall, F1, ROC AUC o matrices de confusión.

De tutorial a producción: qué cambia

Crear un modelo en BigQuery ML puede ser relativamente sencillo. Operarlo correctamente durante meses es el verdadero problema de arquitectura.

En producción necesitamos considerar la frecuencia de entrenamiento, la estabilidad del esquema, la evolución de las features, el coste de procesamiento, la monitorización de predicciones y el mecanismo mediante el que los consumidores acceden al resultado.

También es importante separar el concepto de modelo del concepto de dataset de predicciones. El modelo puede actualizarse con una determinada frecuencia mientras que las predicciones pueden generarse con otra cadencia.

Patrón recomendado: Dataform para transformar y gobernar datos + BigQuery ML para entrenamiento y scoring cuando el caso de uso encaja con sus capacidades + tablas de predicción consumibles por las aplicaciones analíticas.

Checklist de implementación empresarial

  1. Define el objetivo de negocio y la variable objetivo antes de escribir el modelo.
  2. Identifica las fuentes de datos y establece la granularidad exacta de una observación.
  3. Construye las features mediante SQL reproducible y versionado.
  4. Comprueba nulos, cardinalidad, outliers, distribución y posibles fugas de información.
  5. Divide correctamente los datos de entrenamiento y evaluación según la naturaleza temporal del problema.
  6. Selecciona el modelo de BigQuery ML adecuado para el problema y evita complejidad innecesaria.
  7. Evalúa el modelo con métricas relevantes para el negocio, no únicamente con accuracy.
  8. Analiza el volumen de datos procesado y establece controles FinOps antes de automatizar.
  9. Orquesta las transformaciones con Dataform y declara explícitamente las dependencias.
  10. Define la frecuencia de entrenamiento, scoring, validación y revisión del modelo.
  11. Monitoriza cambios en los datos y en la distribución de las features.
  12. Documenta quién consume las predicciones y qué SLA necesita el proceso.

Preguntas frecuentes sobre BigQuery ML

¿Qué es BigQuery ML y para qué sirve?

BigQuery ML permite construir modelos de Machine Learning directamente sobre datos almacenados en BigQuery utilizando SQL. Es especialmente interesante cuando los datos ya están en el Data Warehouse y queremos reducir movimientos de datos y complejidad operacional.

¿Se puede hacer Machine Learning con SQL en BigQuery sin utilizar Python?

Sí. BigQuery ML permite entrenar, evaluar y realizar predicciones utilizando SQL para diferentes familias de modelos. Python sigue siendo una opción adecuada cuando necesitamos algoritmos, librerías o procesos que no encajan dentro de las capacidades disponibles en BigQuery ML.

¿Qué aporta Dataform a un proyecto de BigQuery ML?

Dataform aporta una capa de ingeniería de datos para organizar SQL, dependencias, materializaciones y validaciones. En una arquitectura de Machine Learning resulta especialmente útil para convertir el feature engineering en un proceso reproducible y gobernado.

Conclusión: BigQuery ML es una decisión de arquitectura

Aprender BigQuery ML no consiste únicamente en memorizar la sintaxis de CREATE MODEL. El verdadero salto profesional aparece cuando entendemos qué datos utilizar, cómo construir features reproducibles, cómo evitar leakage, cuánto cuesta procesar el dataset y cómo automatizar todo el ciclo.

Para equipos que ya utilizan Google Cloud y BigQuery como plataforma analítica, combinar BigQuery ML + SQL + Dataform puede reducir considerablemente la complejidad de determinados pipelines de Machine Learning.

La clave es no convertir BigQuery ML en una solución universal. Cuando el problema encaja, mantener los datos y gran parte del ciclo de ML dentro del mismo ecosistema puede ser una ventaja arquitectónica enorme. Cuando no encaja, debemos reconocerlo y utilizar una plataforma de ML más especializada.

¿Quieres llevar Google Cloud a producción?

Diseña una arquitectura de datos, analítica e Inteligencia Artificial alineada con tus necesidades reales de negocio.

Sobre el Autor: Eduardo Martínez Agrelo

AI & Data Architect

Eduardo Martínez Agrelo es AI & Data Architect especializado en arquitecturas de datos, analítica e Inteligencia Artificial sobre Google Cloud. Su enfoque combina ingeniería de datos, BigQuery, Machine Learning y diseño de plataformas orientadas a producción, poniendo especial énfasis en escalabilidad, automatización, rendimiento y control de costes.

Comparte conocimiento técnico y experiencias de arquitectura para ayudar a profesionales y organizaciones a construir soluciones modernas de datos e IA sobre cloud.