category

Machine learningDatabaseCloudBase de DatosAplicación WebKuberneteseCommerce

Airflow Migración y Limpieza de Datos de Bigtable a Snowflake con Airflow 2.9 en Kubernetes

Este documento describe una implementación reciente que involucra la extracción, validación, transformación y carga programada de datos de series temporales desde Google Bigtable hacia Snowflake, utilizando Apache Airflow 2.9 desplegado sobre Kubernetes con Horizontal Pod Autoscaling (HPA). El objetivo fue procesar diariamente grandes lotes de registros con limpieza de datos y bajo mantenimiento operativo.


Contexto

Los datos de origen consistían en aproximadamente 1.200 millones de registros almacenados en Google Bigtable, con incrementos diarios entre 3 y 10 millones de filas. El destino era Snowflake, donde análisis y dashboards aguas abajo requerían consistencia y baja latencia. Entre los retos estaban:

  • Evolución del esquema a lo largo del tiempo
  • Alineación de timestamps anidados para datos temporales
  • Carga multi-región con variabilidad de rendimiento
  • Necesidad de portabilidad en la nube y baja complejidad operativa

Resumen de Arquitectura

El pipeline se construyó utilizando:

  • Apache Airflow 2.9 con KubernetesExecutor
  • EKS (Elastic Kubernetes Service) con HPA definido por plantilla de pod
  • Cloud Functions y Pub/Sub para eventos de activación
  • Parquet y PyArrow para entrada/salida
  • Snowflake como destino, usando COPY INTO desde un stage externo en S3

Un stack de logs compartido (FluentBit → OpenSearch) permitió trazabilidad y observabilidad de métricas.


Pasos del Pipeline

1. Extracción desde Bigtable

Cada ejecución comenzaba con una Cloud Function activada por Pub/Sub, que notificaba a Airflow sobre un nuevo lote. Un cliente Python para Bigtable realizaba escaneos limitados y escribía archivos Parquet comprimidos en GCS usando PyArrow.

  • La extracción se paralelizaba por rangos de claves de fila
  • La lógica de reintentos y retroceso estaba implementada en operadores personalizados de Airflow

2. Limpieza y Validación de Datos

Cada fragmento Parquet se procesaba en un pod dedicado con la siguiente lógica:

  • Eliminar filas con campos obligatorios faltantes
  • Normalizar columnas de fecha/hora a UTC
  • Forzar tipos de datos según una versión dinámica de esquema en JSON
  • Eliminar duplicados mediante claves hash compuestas
  • Agregar campos de metadatos (ID de lote y timestamp de procesamiento)

Esta etapa se implementó con pandas y pyarrow, ejecutada dentro de pods que se escalaban horizontalmente usando HPA según CPU y memoria.

3. Preparación y Carga en Snowflake

Los datos limpios se trasladaban a un área de staging en S3 mediante operaciones gsutil rsync paralelas (multi-nube). Se usaba el mecanismo de stage externo de Snowflake con COPY INTO orquestado desde Airflow.

  • Se aplicó particionado por fecha y región para mejorar el rendimiento de carga
  • La supervisión se integró mediante callbacks de Airflow y métricas Prometheus personalizadas

¿Por qué Airflow 2.9 y Kubernetes con HPA?

  • Airflow 2.9 ofrecía mejoras en TaskFlow, soporte más sólido para KubernetesExecutor y seguimiento de dependencias más robusto
  • HPA permitió un uso eficiente de recursos: los DAGs operaban con bajo costo nocturno y escalaban dinámicamente en picos de carga
  • Airflow sobre Kubernetes facilitó el aislamiento de errores por pod y actualizaciones independientes de imágenes de operadores

Resultados

  • Promedio diario de filas procesadas: ~7 millones
  • Duración típica del DAG: ~28 minutos
  • Máximo de pods paralelos (HPA): 96
  • Tasa de fallos en validación de datos: < 0.04 %
  • Velocidad de carga en Snowflake: ~9–11 millones de filas/min (bulk load)

Lecciones Aprendidas

  • La validación explícita de tipos y versionado de esquemas evitó errores en ingestión a medida que evolucionaba el origen
  • La modularización con TaskGroups mejoró la visibilidad de DAGs y facilitó los reintentos
  • La sincronización multi-nube (GCS → S3) fue estable, pero requiere planificación de costos por salida regional
  • Las herramientas de observabilidad (OpenTelemetry / Prometheus) fueron útiles para diagnosticar el autoscaling

Conclusión

Esta implementación refleja un patrón técnico viable para migraciones de datos a gran escala desde Bigtable hacia Snowflake, utilizando Airflow 2.9 sobre Kubernetes. La arquitectura ofreció rendimiento estable ante cargas variables y altos estándares de calidad de datos, con poca intervención operativa continua.


🔍 ¿Necesitas diseñar pipelines ETL resilientes sobre Kubernetes?

Asistimos a equipos que construyen pipelines de datos con Airflow, Snowflake y entornos multi-nube. Contáctanos para asesoramiento técnico o revisión arquitectónica.


Table of Contents

  • **Contexto**
  • **Resumen de Arquitectura**
  • **Pasos del Pipeline**
  • **¿Por qué Airflow 2.9 y Kubernetes con HPA?**
  • **Lecciones Aprendidas**
  • **Conclusión**

Trending

Orquestar Spark en AWS EMR con Apache Airflow — Enfoque Low-OpsEstudio de caso: Un sistema ligero de detección de intrusos con OpenFaaS y PyTorchCouchDB o AWS DynamoDBApache Airflow 2.x en Kubernetes – Orquestación de datos lista para producción a escala Big DataCaso de Estudio: Migración de CosmosDB y MS SQL a ClickHouse, PostgreSQL y CouchDB