Cómo usar la actividad ForEach en Azure Data Factory
La actividad ForEach en Azure Data Factory permite repetir un conjunto de acciones para cada elemento de una lista, sin duplicar actividades en el pipeline. En lugar de crear la misma actividad decenas de veces, defines la acción una sola vez y ForEach se encarga de la repetición. Es el enfoque ideal para procesar varios archivos, tablas o parámetros de una vez. A continuación vas a usar la actividad ForEach en Azure Data Factory para recorrer una lista de tablas y ejecutar una acción para cada una.
Requisitos previos
- Una instancia de Azure Data Factory (puedes crear una en el portal de Azure).
- Acceso a ADF Studio para crear y editar pipelines.
- Conocimientos básicos de pipelines, actividades y parámetros en ADF.
- Opcional: un linked service y un dataset, si quieres copiar datos reales dentro del bucle.
Paso 1: Crear el pipeline y un parámetro de lista
En ADF Studio, abre la pestaña Author y crea un nuevo pipeline. Ve a la pestaña Parameters y añade un parámetro de tipo Array llamado tableList. Guardar la lista en un parámetro hace que el pipeline sea reutilizable: puedes cambiar los valores sin tocar la lógica. Define un valor por defecto para poder probar de inmediato:
["Clientes", "Produtos", "Vendas"]
Paso 2: Añadir la actividad ForEach
En el panel de actividades, abre el grupo Iteration & conditionals y arrastra la actividad ForEach al lienzo. Con ella seleccionada, ve a la pestaña Settings. En el campo Items indicas la lista que quieres recorrer mediante una expresión (las expresiones en ADF siempre empiezan por @):
@pipeline().parameters.tableList
Por defecto, ForEach ejecuta las iteraciones en paralelo (hasta 20 a la vez), lo que es rápido pero puede sobrecargar el origen o el destino. Si el orden importa, activa la opción Sequential para que las iteraciones se ejecuten una a una.
Paso 3: Definir las acciones dentro del bucle
Haz clic en el icono del lápiz dentro de la actividad ForEach para abrir el lienzo interno. Aquí colocas las actividades que se repiten en cada iteración — por ejemplo, una Copy, una Stored Procedure o, solo para probar, una actividad Set Variable. Para referirte al elemento actual de la lista, usa la función @item():
@item()
Ese valor puede entrar en otras expresiones. Por ejemplo, para construir dinámicamente una consulta que cuente las filas de la tabla actual:
@concat('SELECT COUNT(1) FROM ', item())
Si la lista contuviera objetos en lugar de texto simple, accederías a cada propiedad con @item().nombreDeLaPropiedad. Dentro del bucle también puedes encadenar varias actividades, igual que en un pipeline normal.
Paso 4: Controlar el paralelismo
En la misma pestaña Settings, el campo Batch count define cuántas iteraciones se ejecutan al mismo tiempo (entre 1 y 50) cuando el modo no es secuencial. Reduce este valor si ves errores de limitación (throttling) en la base de datos o en el servicio de destino; súbelo cuando quieras más velocidad y el origen aguante la carga.
Consejo: empieza con un Batch count bajo en producción y auméntalo poco a poco mientras observas el rendimiento.
Verificar el resultado
Haz clic en Debug para ejecutar el pipeline. En el panel Output, la actividad ForEach se expande en una iteración por cada elemento de la lista — en este ejemplo, tres iteraciones: Clientes, Produtos y Vendas. Comprueba que todas terminan con la marca verde y que el número de iteraciones coincide con el tamaño de la lista. Si alguna falla, abre esa iteración y revisa la expresión @item() y la actividad interna.
Conclusión
Ya puedes usar ForEach para recorrer cualquier lista: nombres de archivos de una actividad Get Metadata, tablas devueltas por una Lookup o valores pasados como parámetro en el arranque. Un patrón muy común es combinar Lookup (para leer una tabla de control) con ForEach (para procesar cada fila), creando pipelines basados en metadatos. El siguiente paso es probar ese patrón con datos reales. ¿Cuál será la primera lista que vas a recorrer — tablas, archivos o APIs?