<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Agustín José Mazzeo</title>
    <description>The latest articles on DEV Community by Agustín José Mazzeo (@agusmazzeo).</description>
    <link>https://dev.to/agusmazzeo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3957202%2F14ae3bd2-fbda-49b9-b238-f6f8c3e3d1e8.jpg</url>
      <title>DEV Community: Agustín José Mazzeo</title>
      <link>https://dev.to/agusmazzeo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agusmazzeo"/>
    <language>en</language>
    <item>
      <title>Batch vs Streaming en Data Engineering: cómo decidir en producción sin romper nada</title>
      <dc:creator>Agustín José Mazzeo</dc:creator>
      <pubDate>Wed, 12 Aug 2026 22:25:43 +0000</pubDate>
      <link>https://dev.to/agusmazzeo/batch-vs-streaming-en-data-engineering-como-decidir-en-produccion-sin-romper-nada-7p3</link>
      <guid>https://dev.to/agusmazzeo/batch-vs-streaming-en-data-engineering-como-decidir-en-produccion-sin-romper-nada-7p3</guid>
      <description>&lt;h1&gt;
  
  
  Batch vs Streaming en Data Engineering: cómo decidir en producción sin romper nada
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En Data Engineering, la pregunta no es si usar batch o streaming.&lt;br&gt;&lt;br&gt;
La pregunta correcta es: &lt;strong&gt;¿qué problema estoy resolviendo y qué trade-offs puedo aceptar?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Batch vs streaming no es una diferencia conceptual. Es una decisión &lt;strong&gt;operativa&lt;/strong&gt; que impacta costos, mantenimiento, confiabilidad y latencia.&lt;/p&gt;

&lt;p&gt;Elegir mal no rompe el sistema el día 1. Lo rompe en producción.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problema real en producción
&lt;/h2&gt;

&lt;p&gt;Supuesto: tienes una plataforma que alimenta dashboards, alertas y modelos.&lt;/p&gt;

&lt;p&gt;Aparecen pedidos típicos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Queremos métricas en tiempo real”&lt;/li&gt;
&lt;li&gt;“El fraude debe detectarse en segundos”&lt;/li&gt;
&lt;li&gt;“El dashboard tarda horas”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La reacción más común:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Pasemos todo a streaming”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Resultado en producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mayor complejidad sin necesidad real&lt;/li&gt;
&lt;li&gt;Costos constantes elevados&lt;/li&gt;
&lt;li&gt;Debugging difícil&lt;/li&gt;
&lt;li&gt;Fallos silenciosos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conclusión: &lt;strong&gt;Batch y streaming no compiten. Se combinan según el caso de uso.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Diferencia real en producción
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Batch
&lt;/h3&gt;

&lt;p&gt;Procesamiento por intervalos, optimizado para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simplicidad operativa&lt;/li&gt;
&lt;li&gt;reproducibilidad&lt;/li&gt;
&lt;li&gt;bajo costo&lt;/li&gt;
&lt;li&gt;observabilidad clara&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Casos reales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ETL incremental&lt;/li&gt;
&lt;li&gt;dashboards de negocio&lt;/li&gt;
&lt;li&gt;backfills&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Streaming
&lt;/h3&gt;

&lt;p&gt;Procesamiento continuo de eventos, optimizado para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;baja latencia&lt;/li&gt;
&lt;li&gt;reacción inmediata&lt;/li&gt;
&lt;li&gt;procesamiento incremental&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Casos reales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fraude&lt;/li&gt;
&lt;li&gt;tracking de usuarios&lt;/li&gt;
&lt;li&gt;alertas operativas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Diferencia clave
&lt;/h3&gt;

&lt;p&gt;No es tiempo real vs no tiempo real.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Batch:&lt;/strong&gt; exactitud + simplicidad + costo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming:&lt;/strong&gt; latencia + reactividad&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cuándo usar Batch
&lt;/h2&gt;

&lt;p&gt;Usa batch cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la latencia puede ser minutos u horas&lt;/li&gt;
&lt;li&gt;necesitas reprocesamiento&lt;/li&gt;
&lt;li&gt;querés simplicidad operativa&lt;/li&gt;
&lt;li&gt;el costo es prioridad&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Caso real
&lt;/h3&gt;

&lt;p&gt;Pipeline de ventas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ejecución cada 1 hora&lt;/li&gt;
&lt;li&gt;carga incremental&lt;/li&gt;
&lt;li&gt;transformación en warehouse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resultado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;estable&lt;/li&gt;
&lt;li&gt;barato&lt;/li&gt;
&lt;li&gt;fácil de mantener&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cuándo usar Streaming
&lt;/h2&gt;

&lt;p&gt;Usa streaming cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;la latencia es crítica&lt;/li&gt;
&lt;li&gt;necesitas reaccionar automáticamente&lt;/li&gt;
&lt;li&gt;el dato pierde valor rápido&lt;/li&gt;
&lt;li&gt;hay alto volumen continuo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Caso real
&lt;/h3&gt;

&lt;p&gt;Fraude:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;eventos en Kafka&lt;/li&gt;
&lt;li&gt;procesamiento en segundos&lt;/li&gt;
&lt;li&gt;trigger inmediato&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resultado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mayor complejidad&lt;/li&gt;
&lt;li&gt;alto valor de negocio&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trade-offs reales
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Latencia
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Batch: minutos → horas&lt;/li&gt;
&lt;li&gt;Streaming: ms → segundos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trade-off:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;menor latencia = mayor complejidad + mayor costo&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Costo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Batch: bajo si está bien diseñado&lt;/li&gt;
&lt;li&gt;Streaming: infraestructura activa todo el tiempo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Complejidad
&lt;/h3&gt;

&lt;p&gt;Batch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple de debuggear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;offsets, ventanas, estado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Realidad:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;streaming es más difícil de operar&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Observabilidad
&lt;/h3&gt;

&lt;p&gt;Batch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ejecuciones claras&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sistema continuo con métricas (lag, throughput)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Problema:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;puede fallar sin señales claras&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Confiabilidad
&lt;/h3&gt;

&lt;p&gt;Batch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retries simples&lt;/li&gt;
&lt;li&gt;backfills fáciles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicados&lt;/li&gt;
&lt;li&gt;eventos fuera de orden&lt;/li&gt;
&lt;li&gt;exactly-once complejo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ejemplo práctico (paso a paso)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problema
&lt;/h3&gt;

&lt;p&gt;E-commerce necesita:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dashboard de ventas&lt;/li&gt;
&lt;li&gt;detección de fraude&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Diseño incorrecto
&lt;/h3&gt;

&lt;p&gt;Todo en streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka + Spark Streaming&lt;/li&gt;
&lt;li&gt;dashboards en tiempo real&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Problema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;alto costo&lt;/li&gt;
&lt;li&gt;complejidad innecesaria&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Diseño correcto (híbrido)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1) Separar casos de uso
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;dashboard → batch&lt;/li&gt;
&lt;li&gt;fraude → streaming&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2) Pipeline batch
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;fuente: DB&lt;/li&gt;
&lt;li&gt;ejecución cada 1 hora&lt;/li&gt;
&lt;li&gt;carga incremental&lt;/li&gt;
&lt;li&gt;destino: warehouse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Airflow + dbt + BigQuery&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3) Pipeline streaming
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;eventos de pago&lt;/li&gt;
&lt;li&gt;Kafka&lt;/li&gt;
&lt;li&gt;procesamiento en streaming&lt;/li&gt;
&lt;li&gt;salida: alertas&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4) Enriquecimiento
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;lookups a DB&lt;/li&gt;
&lt;li&gt;cache (Redis)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5) Observabilidad
&lt;/h4&gt;

&lt;p&gt;Batch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;éxito/error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Streaming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lag&lt;/li&gt;
&lt;li&gt;latencia&lt;/li&gt;
&lt;li&gt;dead letter queue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resultado
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;dashboard confiable y barato&lt;/li&gt;
&lt;li&gt;fraude en tiempo real&lt;/li&gt;
&lt;li&gt;sistema mantenible&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Errores comunes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;“Todo debería ser real-time”&lt;/li&gt;
&lt;li&gt;subestimar complejidad de streaming&lt;/li&gt;
&lt;li&gt;no definir SLA&lt;/li&gt;
&lt;li&gt;no monitorear métricas&lt;/li&gt;
&lt;li&gt;mezclar múltiples casos en un pipeline&lt;/li&gt;
&lt;li&gt;no planificar reprocesos&lt;/li&gt;
&lt;li&gt;elegir tecnología antes del problema&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist de producción
&lt;/h2&gt;

&lt;p&gt;Antes de decidir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Cuál es la latencia máxima aceptable?&lt;/li&gt;
&lt;li&gt;¿Necesito real-time o solo mayor frecuencia?&lt;/li&gt;
&lt;li&gt;¿Cuánto cuesta operar 24/7?&lt;/li&gt;
&lt;li&gt;¿Necesito reprocesar datos?&lt;/li&gt;
&lt;li&gt;¿Reacción o análisis?&lt;/li&gt;
&lt;li&gt;¿Volumen de eventos?&lt;/li&gt;
&lt;li&gt;¿Tengo capacidad de operar streaming?&lt;/li&gt;
&lt;li&gt;¿Cómo monitoreo el sistema?&lt;/li&gt;
&lt;li&gt;¿Qué pasa si falla?&lt;/li&gt;
&lt;li&gt;¿Cómo manejo duplicados?&lt;/li&gt;
&lt;li&gt;¿Voy a necesitar backfills?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;No hay respuesta única.&lt;/p&gt;

&lt;p&gt;Regla práctica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;empieza con batch&lt;/li&gt;
&lt;li&gt;agrega streaming cuando el negocio lo necesite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En producción:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;el mejor sistema es el más simple que cumple el SLA&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  CTA
&lt;/h3&gt;

&lt;p&gt;Antes de usar streaming, responde esto:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿realmente necesitas esa latencia o estás siguiendo una moda?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>architecture</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>What does a Data Engineer do in Production (No Hype)</title>
      <dc:creator>Agustín José Mazzeo</dc:creator>
      <pubDate>Fri, 29 May 2026 02:10:46 +0000</pubDate>
      <link>https://dev.to/agusmazzeo/what-does-a-data-engineer-do-in-production-no-hype-3khj</link>
      <guid>https://dev.to/agusmazzeo/what-does-a-data-engineer-do-in-production-no-hype-3khj</guid>
      <description>&lt;h1&gt;
  
  
  What Does a Data Engineer Do in Production (No Hype)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;If you learned Data Engineering with notebooks and clean datasets, this article is for you. In production there are no clean datasets: there are systems that change, pipelines that fail, and data that has to be correct &lt;strong&gt;every single day&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;A Data Engineer in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds and maintains reliable pipelines&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Ensures data quality (doesn’t “wait” for good data)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Designs for consumption (BI, ML, APIs)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Operates: monitors, debugs, and reprocesses&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Makes real trade-off decisions: cost, performance, risk&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;In theory:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Extract data, transform it, and load it into a data warehouse”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data arrives incomplete or late&amp;nbsp;&lt;/li&gt;
&lt;li&gt;APIs fail or change schemas&amp;nbsp;&lt;/li&gt;
&lt;li&gt;“OK” jobs can still produce incorrect data&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Dashboards depend on you&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Result: the job is not just building, it’s &lt;strong&gt;operating living data systems&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explanation
&lt;/h2&gt;

&lt;p&gt;A Data Engineer builds and operates systems that turn chaotic data into reliable data for the business.&lt;/p&gt;

&lt;p&gt;It’s not just ETL.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pipeline design&amp;nbsp;&lt;/li&gt;
&lt;li&gt;data quality enforcement&amp;nbsp;&lt;/li&gt;
&lt;li&gt;continuous operations&amp;nbsp;&lt;/li&gt;
&lt;li&gt;architectural decision-making&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you understand the problem, the work breaks down into these layers:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ingestion (unstable sources)
&lt;/h3&gt;

&lt;p&gt;What it involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrating APIs, databases, events&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Handling errors and retries&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Detecting schema changes&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Defensive design, not perfect data&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Transformation
&lt;/h3&gt;

&lt;p&gt;What it involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cleaning and deduplication&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Business logic&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Performance&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;ROW_NUMBER&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;rn&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;raw_users&lt;/span&gt;

&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Key decision: &lt;strong&gt;correctness vs performance&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Modeling
&lt;/h3&gt;

&lt;p&gt;What it involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing for BI or ML&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard → aggregated table&amp;nbsp;&lt;/li&gt;
&lt;li&gt;ML → detailed events&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Depends on consumption&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consumption
&lt;/h3&gt;

&lt;p&gt;Consumers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BI&amp;nbsp;&lt;/li&gt;
&lt;li&gt;ML&amp;nbsp;&lt;/li&gt;
&lt;li&gt;APIs&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Changing schema breaks things → you need contracts&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Operation (the most important part)
&lt;/h3&gt;

&lt;p&gt;What it involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alerts&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Debugging&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Reprocessing&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This is where the real work happens&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Example
&lt;/h2&gt;

&lt;p&gt;E-commerce pipeline:&lt;/p&gt;

&lt;h3&gt;
  
  
  Source
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;read_stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_events&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Raw
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;raw_orders&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;api_orders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Curated
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;total_amount&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;raw_orders&lt;/span&gt;

&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;order_id&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Serving
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;curated_orders&lt;/span&gt;

&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Consumption
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard&amp;nbsp;&lt;/li&gt;
&lt;li&gt;ML&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 The pipeline ends when someone actually uses the data&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Assuming data is correct&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Not storing raw data&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Not validating outputs&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Breaking contracts&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Not handling failures&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Can I reprocess data?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do I store raw data?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do I have validations?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Is it idempotent?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do I know who consumes it?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Do I have alerts?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Are costs controlled?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Are logs useful?&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Being a Data Engineer in production is not writing SQL.&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building resilient systems&amp;nbsp;&lt;/li&gt;
&lt;li&gt;anticipating failures&amp;nbsp;&lt;/li&gt;
&lt;li&gt;balancing trade-offs&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Your real value is making sure data always works&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;If you’re learning Data Engineering: start with real pipelines, not theory.&lt;/p&gt;

&lt;p&gt;👉 Next step: understand Batch vs Streaming in production&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>etl</category>
      <category>analitycsengineering</category>
    </item>
    <item>
      <title>Qué hace un Data Engineer en producción (sin humo)</title>
      <dc:creator>Agustín José Mazzeo</dc:creator>
      <pubDate>Thu, 28 May 2026 19:17:32 +0000</pubDate>
      <link>https://dev.to/agusmazzeo/que-hace-un-data-engineer-en-produccion-sin-humo-5gbg</link>
      <guid>https://dev.to/agusmazzeo/que-hace-un-data-engineer-en-produccion-sin-humo-5gbg</guid>
      <description>&lt;h1&gt;
  
  
  Qué hace un Data Engineer en producción (sin humo)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Si aprendiste Data Engineering con notebooks y datasets limpios, este artículo es para vos. En producción no hay datasets prolijos: hay sistemas que cambian, pipelines que fallan y datos que tienen que estar bien &lt;strong&gt;todos los días&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Un Data Engineer en producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Construye y mantiene pipelines confiables&lt;/li&gt;
&lt;li&gt;Asegura calidad de datos (no “espera” que llegue bien)&lt;/li&gt;
&lt;li&gt;Diseña pensando en consumo (BI, ML, APIs)&lt;/li&gt;
&lt;li&gt;Opera: monitorea, debuggea y reprocesa&lt;/li&gt;
&lt;li&gt;Toma decisiones con trade-offs reales: costo, performance, riesgo&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Problema
&lt;/h2&gt;

&lt;p&gt;En teoría:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Extraer datos, transformarlos y cargarlos en un data warehouse”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En producción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los datos llegan incompletos o tarde&lt;/li&gt;
&lt;li&gt;Las APIs fallan o cambian el esquema&lt;/li&gt;
&lt;li&gt;Jobs “OK” pueden producir datos incorrectos&lt;/li&gt;
&lt;li&gt;Dashboards dependen de vos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Resultado: el trabajo no es solo construir, es &lt;strong&gt;operar sistemas de datos vivos&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explicación
&lt;/h2&gt;

&lt;p&gt;Un Data Engineer construye y opera sistemas que convierten datos caóticos en datos confiables para el negocio.&lt;/p&gt;

&lt;p&gt;No es solo ETL. &lt;/p&gt;

&lt;p&gt;Es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diseño de pipelines&lt;/li&gt;
&lt;li&gt;aseguramiento de calidad&lt;/li&gt;
&lt;li&gt;operación continua&lt;/li&gt;
&lt;li&gt;decisiones de arquitectura&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez que entendés el problema, el trabajo se divide en estas capas:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ingesta (fuentes inestables)
&lt;/h3&gt;

&lt;p&gt;Qué implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrar APIs, bases, eventos&lt;/li&gt;
&lt;li&gt;Manejar errores y reintentos&lt;/li&gt;
&lt;li&gt;Detectar cambios de esquema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Diseño defensivo, no datos perfectos&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Transformación
&lt;/h3&gt;

&lt;p&gt;Qué implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limpieza y deduplicación&lt;/li&gt;
&lt;li&gt;Lógica de negocio&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="n"&gt;ROW_NUMBER&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;rn&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;raw_users&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Decisión clave: &lt;strong&gt;correctitud vs performance&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Modelado
&lt;/h3&gt;

&lt;p&gt;Qué implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diseñar para BI o ML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard → tabla agregada&lt;/li&gt;
&lt;li&gt;ML → eventos detallados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Depende del consumo&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consumo
&lt;/h3&gt;

&lt;p&gt;Consumidores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BI&lt;/li&gt;
&lt;li&gt;ML&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Cambiar schema rompe cosas → necesitas contratos&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Operación (lo más importante)
&lt;/h3&gt;

&lt;p&gt;Qué implica:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alertas&lt;/li&gt;
&lt;li&gt;Debug&lt;/li&gt;
&lt;li&gt;Reprocesos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Aquí está el trabajo real&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejemplo práctico
&lt;/h2&gt;

&lt;p&gt;Pipeline de e-commerce:&lt;/p&gt;

&lt;h3&gt;
  
  
  Source
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;read_stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_events&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Raw
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;raw_orders&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;api_orders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Curated
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;total_amount&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;raw_orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;order_id&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Serving
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;curated_orders&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Consumo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard&lt;/li&gt;
&lt;li&gt;ML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 El pipeline termina cuando alguien usa los datos&lt;/p&gt;

&lt;h2&gt;
  
  
  Errores comunes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Asumir datos correctos&lt;/li&gt;
&lt;li&gt;No guardar raw&lt;/li&gt;
&lt;li&gt;No validar resultados&lt;/li&gt;
&lt;li&gt;Romper contratos&lt;/li&gt;
&lt;li&gt;No manejar fallas&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;¿Puedo reprocesar datos?&lt;/li&gt;
&lt;li&gt;¿Guardo raw?&lt;/li&gt;
&lt;li&gt;¿Tengo validaciones?&lt;/li&gt;
&lt;li&gt;¿Es idempotente?&lt;/li&gt;
&lt;li&gt;¿Sé quién consume?&lt;/li&gt;
&lt;li&gt;¿Tengo alertas?&lt;/li&gt;
&lt;li&gt;¿Costo controlado?&lt;/li&gt;
&lt;li&gt;¿Logs útiles?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Ser Data Engineer en producción no es escribir SQL.&lt;/p&gt;

&lt;p&gt;Es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;construir sistemas resilientes&lt;/li&gt;
&lt;li&gt;anticipar fallas&lt;/li&gt;
&lt;li&gt;balancear trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Tu valor real es que los datos funcionen siempre&lt;/p&gt;

&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;Si estás aprendiendo Data Engineering: empezá por pipelines reales, no por teoría.&lt;/p&gt;

&lt;p&gt;👉 Siguiente paso: entender Batch vs Streaming en producción&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>etl</category>
      <category>analyticsengineering</category>
    </item>
  </channel>
</rss>
