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
¿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.
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.
Datos fuente
Tablas raw o curated procedentes de sistemas transaccionales, APIs, eventos, aplicaciones o procesos de ingestión.
- Particionado
- Clustering
- Calidad del dato
Feature engineering
Construcción de variables utilizando SQL. Esta capa debe ser determinista, versionable y reproducible.
- Agregaciones temporales
- Variables categóricas
- Control de leakage
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
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.
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.
-- ============================================================
-- 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.
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.
Checklist de implementación empresarial
- Define el objetivo de negocio y la variable objetivo antes de escribir el modelo.
- Identifica las fuentes de datos y establece la granularidad exacta de una observación.
- Construye las features mediante SQL reproducible y versionado.
- Comprueba nulos, cardinalidad, outliers, distribución y posibles fugas de información.
- Divide correctamente los datos de entrenamiento y evaluación según la naturaleza temporal del problema.
- Selecciona el modelo de BigQuery ML adecuado para el problema y evita complejidad innecesaria.
- Evalúa el modelo con métricas relevantes para el negocio, no únicamente con accuracy.
- Analiza el volumen de datos procesado y establece controles FinOps antes de automatizar.
- Orquesta las transformaciones con Dataform y declara explícitamente las dependencias.
- Define la frecuencia de entrenamiento, scoring, validación y revisión del modelo.
- Monitoriza cambios en los datos y en la distribución de las features.
- Documenta quién consume las predicciones y qué SLA necesita el proceso.
Preguntas frecuentes sobre BigQuery ML
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.
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.
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.
