El director de orquesta de Fabric: los Pipelines de Data Factory. Actividades, Copy Data vs Copy Job, control flow, parámetros y expressions, triggers event-based con Activator, monitoring y best practices. 🌸
IntermedioAvanzado
🎯
1. Objetivos y encaje en el DP-700
¿Qué te enseña este módulo?
Este módulo es sobre el orquestador maestro de Fabric: los Pipelines de Data Factory. Los objetivos oficiales:
Describir capabilities de pipelines en Microsoft Fabric.
Usar la actividad Copy Data en un pipeline.
Crear pipelines basados en templates predefinidos.
Ejecutar y monitorear pipelines.
Peso en el examen DP-700
Los pipelines aparecen transversalmente en los tres dominios, pero especialmente en Dominio 1 y 2:
Dominio
Cómo aparece pipelines
Implement and manage (30-35%)
Orchestration: elección entre Dataflow/Pipeline/Notebook, schedules, event-based triggers, parámetros y dynamic expressions
Ingest and transform (30-35%)
Copy Data, Copy Job, actividades de ingesta y transformación, patrones ELT
Monitor and optimize (30-35%)
Monitor Hub, troubleshooting de pipelines, alertas, retry logic
🎯 Qué es CRÍTICO dominar
Las actividades más usadas: Copy Data, Dataflow, Notebook, Lookup, Get Metadata, ForEach, If Condition
Cuándo elegir Pipeline vs Dataflow vs Notebook (pregunta clásica de escenario)
Triggers event-based con Activator (feature moderna, muy examinable)
Parameters y dynamic content (para pipelines reutilizables)
Retry logic y failure handling (para producción real)
Copy Job (alternativa moderna a Copy activity)
🔧
2. ¿Qué es un pipeline en Fabric?
2.1 · Definición
Un pipeline en Microsoft Fabric es un contenedor que encapsula una secuencia de actividades que realizan tareas de movimiento y procesamiento de datos.
Piénsalo como el director de orquesta 🎼: no toca ningún instrumento (no transforma datos por sí mismo), pero coordina todos los instrumentos (actividades) para que suenen en el momento correcto y en el orden correcto.
2.2 · Qué puede hacer un pipeline
Un pipeline puede:
✅ Mover datos entre sources y destinos.
✅ Ejecutar código de transformación (dataflows, notebooks, SQL, etc.).
✅ Orquestar múltiples actividades con dependencias (success/failure/completion).
✅ Aplicar lógica de control: condicionales, loops, ramificaciones.
✅ Ejecutarse por schedule o eventos.
✅ Parametrizarse para ser reutilizables.
✅ Notificar vía Teams, Outlook, webhooks.
2.3 · Interfaz: el pipeline canvas
En Fabric, los pipelines se diseñan en un canvas gráfico:
Zona central: donde arrastras y conectas actividades.
Barra de actividades (arriba): lista de actividades disponibles.
Panel de propiedades (abajo al seleccionar actividad): configuración de la actividad activa.
Ribbon: Home, Insert, Run, View, etc.
No requiere código. Todo se configura visualmente. Ideal para data engineers que quieren orquestación robusta sin escribir framework de scheduling desde cero.
Parámetros: inmutables durante el run, definidos al inicio.
Variables: mutables, se pueden cambiar durante el run.
10.3 · Expressions y functions
Fabric pipelines usan un expression language para valores dinámicos. Empiezan con @:
Referenciar valores:
@pipeline().parameters.env -- parámetro
@pipeline().RunId -- ID del run actual
@pipeline().TriggerName -- nombre del trigger que lanzó
@pipeline().TriggerTime -- momento del trigger
@variables('x') -- variable
@activity('Lookup1').output.value -- output de actividad
Funciones de fecha:
@utcnow() -- ahora en UTC
@formatDateTime(utcnow(), 'yyyy-MM-dd')
@addDays(utcnow(), -1)
@dayOfWeek(utcnow())
Fichero llega a OneLake/Blob
↓
Evento emitido (Microsoft.Fabric.OneLake.FileCreated)
↓
Eventstream capta el evento
↓
Activator evalúa la condición
↓
Pipeline se ejecuta con parámetros dinámicos
Los componentes clave:
Eventstream: capa de captura de eventos.
Activator (antes "Reflex"): capa de decisión y acción.
12.3 · 🎯 Por qué son tan poderosos
⚡ Real-time processing: no esperas al próximo schedule.
💰 Coste bajo: solo ejecutas cuando hay datos nuevos.
🤖 Automation total: sin intervención manual.
🔄 Data freshness: analytics siempre actualizadas.
12.4 · Cómo configurar un trigger de storage event
Paso 1: en el pipeline canvas → botón Trigger en Home ribbon.
Paso 2: se abre el panel Set alert (usa Activator).
Paso 3: seleccionar tipo de eventos:
OneLake events (para ficheros en OneLake)
Azure Blob Storage events
Paso 4: seleccionar el source:
Para OneLake: workspace + lakehouse + folder.
Para Blob: Azure subscription + storage account.
Paso 5: elegir tipos de eventos:
Microsoft.Fabric.OneLake.FileCreated
Microsoft.Fabric.OneLake.FileDeleted
Microsoft.Storage.BlobCreated
Microsoft.Storage.BlobDeleted
Y muchos más.
Paso 6: filtros (opcional):
Filtrar por folder path.
Filtrar por file name pattern.
Filtrar por file type.
Se hace vía el campo Subject.
Paso 7: configurar la acción del trigger:
Workspace destino.
Pipeline a ejecutar.
Nombre del Activator item (Reflex).
Paso 8: Create → trigger activo.
12.5 · Ejemplo completo (tutorial oficial)
Escenario: cuando se sube un CSV a Files/Source/ en un Lakehouse, procesar y cargar a una tabla.
Setup:
Crear Lakehouse TutorialLakehouse con subfolder Source.
Crear pipeline TutorialPipeline que procesa el CSV.
En Real-Time hub → Fabric Events → OneLake events → Set alert.
Configurar source como TutorialLakehouse/Files/Source.
Eventos: FileCreated y FileDeleted.
Action: Run a Fabric item → seleccionar TutorialPipeline.
Guardar activator como TutorialActivator.
Test:
Subir un CSV a Files/Source/.
Automáticamente se dispara el FileCreated event.
Activator llama al pipeline.
Pipeline procesa y carga a Sales table.
Sin refresh manual, sin esperar schedule.
12.6 · 🎯 Casos de uso comunes
📊 Data lake ingestion: nuevos ficheros → pipeline auto-procesa.
🧪 Trigger a Notebook para preprocessing ML.
🔔 Alertas cuando datasets críticos se modifican.
🔗 Forward events a webhooks para compliance.
📧 Notificaciones vía Teams/Email con el evento.
🎯
13. Trigger parameters
Cuando un pipeline se ejecuta por un trigger de storage event, Fabric expone información del evento al pipeline vía parámetros built-in.
13.1 · Parámetros disponibles
@pipeline()?.TriggerEvent?.FileName -- nombre del fichero
@pipeline()?.TriggerEvent?.FolderPath -- ruta de la carpeta
Ojo con el ?: es sintaxis de "null-safe access". Necesario porque:
Cuando el pipeline se dispara por evento → los valores están presentes.
Cuando el pipeline se ejecuta manualmente (test) → los valores son NULL.
El ? evita que el pipeline falle en test manual.
13.2 · Uso en actividades
Ejemplo: usar el nombre del fichero recibido para construir la ruta:
Puedes ver el output/input de cada actividad al pinchar.
18.3 · Run history
Para cada run pasado:
Timestamp de inicio y fin.
Duración total.
Status general.
Detalles por actividad: input, output, error messages.
Trigger que lo lanzó.
Parámetros con los que se ejecutó.
18.4 · Métricas de performance
Tiempo por actividad.
Rows copiadas (para Copy Data).
Throughput.
CU consumidas.
Útil para identificar bottlenecks.
18.5 · 🎯 Audit trail
Quién ejecutó qué pipeline y cuándo.
Logs detallados con timestamps.
Data lineage (rastreo desde origen hasta destino).
Error messages con contexto.
Esencial para debugging y compliance.
📧
19. Failure notifications
19.1 · Notificaciones básicas por schedule
Para pipelines programados, puedes configurar failure notifications:
Pipeline canvas → Schedule button.
Sección Failure notifications.
Añadir usuarios o grupos.
Cuando el pipeline falla → email automático.
19.2 · Notificaciones avanzadas con Teams/Outlook activities
Para casos más complejos:
Pipeline principal
├─ Actividades de ETL
└─ Si falla cualquier actividad (rama on failure):
├─ Set variable: error_message = detalles
├─ Teams activity: post to #data-alerts
├─ Outlook activity: email to data-team@company.com
└─ Fail activity (opcional, marca fail explícito)
19.3 · Con Activator
Para eventos más avanzados:
Activator detecta cuando pipeline falla.
Puede activar múltiples acciones:
Reenviar a Power Automate.
Escribir a un log centralizado.
Notificar a múltiples canales.
🆚
20. Diferencias con Azure Data Factory
Muchos vienen de Azure Data Factory (ADF) o Azure Synapse Pipelines y les interesa saber qué cambia.
20.1 · Similitudes
Concepto de pipeline y actividades: casi idéntico.
Mayoría de actividades de ADF están en Fabric.
Expression language es el mismo.
Copy Data y conectores: muy similares.
20.2 · Diferencias clave
Fabric añade (no en ADF originalmente):
✅ Outlook activity (email notifications).
✅ Teams activity (notifications en Teams).
✅ Semantic model refresh (para Power BI).
✅ Dataflow Gen2 activity.
✅ Refresh SQL Endpoint activity.
✅ Lakehouse Maintenance activity.
✅ Copy Job (item independiente).
Fabric quita (o cambia nombre):
⚠️ Wrangling Data Flow → reemplazado por Dataflow Gen2.
⚠️ Some legacy connectors deprecated.
Fabric mejora:
✅ Integración nativa con OneLake, Lakehouses, Warehouses.
✅ Trigger events con Activator.
✅ UI más moderna y coherente con el resto de Fabric.
20.3 · Migración ADF → Fabric
Microsoft ofrece:
Compatibilidad de actividades (la mayoría se traduce directamente).
Fabric Lakehouse/Warehouse connectors disponibles en ADF (para hybrid).
Guía de migración de Mapping Data Flows a Dataflow Gen2.
Roadmap: mount ADF resources en Fabric (para transición gradual).
20.4 · ⚠️ Featues NO backported
Los features nuevos de Fabric NO se traen a ADF (dos roadmaps separados).
✨
21. Best practices oficiales
De la documentación oficial:
21.1 · Diseño
Start simple: empieza con data movement básico y añade complejidad gradualmente.
Use parameters: parametriza connections y file paths para hacer pipelines reutilizables.
Handle errors: plan de retry logic y paths alternativos.
Monitor performance: revisa execution times y optimiza actividades lentas.
Test thoroughly: valida con sample data antes de producción.
Para actividades: [verbo]_[objeto] (ej: Copy_Sales_Data, Validate_Row_Count).
21.3 · Modularización
Pipelines grandes → dividir con Invoke Pipeline.
Lógica común → subpipelines reutilizables.
Un pipeline una responsabilidad clara (no "hace de todo").
21.4 · Error handling
Retry logic en actividades propensas a errores transitorios (Web, Copy remote).
Failure paths para notificaciones.
Approval activities para gates críticos.
Fail activity para validaciones estrictas.
21.5 · Performance
Parallelize con ForEach cuando aplique.
Copy activity con DIUs adecuados.
Batching en Copy para reducir overhead.
Incremental loads en vez de full cuando posible.
21.6 · Governance
Usa workspace folders para organizar.
Git integration para versionado.
Deployment pipelines para dev → test → prod.
Secure input/output en actividades sensibles.
⚠️
22. Trampas típicas y confusiones frecuentes
Trampa 1: "Un pipeline es lo mismo que un dataflow"
❌ NO. Un pipeline orquesta actividades. Un dataflow transforma datos. Un pipeline puede ejecutar un dataflow como una de sus actividades.
Trampa 2: "Copy Data es la única forma de mover datos"
❌ También hay Copy Job, Dataflow Gen2, Notebook, Shortcuts, Mirroring. Cada uno para su caso.
Trampa 3: "Los eventos de OneLake son instantáneos"
✅ Casi. Hay una latencia mínima de segundos entre el evento y la ejecución del pipeline. No es exactamente 0ms.
Trampa 4: "Puedo tener 500 actividades en un pipeline"
❌ Máximo 120 actividades por pipeline (incluyendo anidadas). Para más → usa Invoke Pipeline.
Trampa 5: "Retries se aplican automáticamente"
❌ Están desactivados por defecto. Hay que activarlos explícitamente en cada actividad.
Trampa 6: "Los parámetros son iguales que las variables"
❌ Parámetros: input externo, inmutables durante el run. Variables: estado interno, mutables.
Trampa 7: "Trigger parameters funcionan en run manual"
❌ NO. En run manual, @pipeline()?.TriggerEvent?.FileName es NULL. Por eso se usa el ? de null-safe access.
Trampa 8: "Approval activity bloquea todo el workspace"
❌ Solo bloquea ese pipeline específico. Otros pipelines corren normal.
Trampa 9: "El timeout máximo es 24 horas"
❌ Máximo 7 días (7.00:00:00). Default: 12 horas.
Trampa 10: "Fabric Data Factory = Azure Data Factory"
❌ Son distintos. Fabric tiene features nuevas (Teams, Outlook, Semantic Model Refresh, Dataflow Gen2, Refresh SQL Endpoint, Lakehouse Maintenance). ADF no las tiene.