DataWorks ofrece el nodo for-each para iterar sobre un conjunto de resultados proveniente de un nodo de asignación. También es posible personalizar el flujo de trabajo dentro del nodo for-each. Este tema utiliza un ejemplo en el que un nodo for-each itera dos veces sobre la salida de un nodo de asignación e imprime el conteo actual del bucle en cada iteración. Esto demuestra su lógica y configuración.
Requisitos previos
Antes de configurar el nodo, asegúrese de comprender su lógica para evitar errores. Para obtener más información, consulte How for-each nodes work.
Procedimiento
El nodo for-each se utiliza generalmente junto con un nodo de asignación. El procedimiento general es el siguiente.

-
Establecer dependencias de nodos
Un nodo for-each debe depender de un nodo de asignación. Para obtener detalles sobre la configuración, consulte Create and configure a workflow.
-
Pasar el conjunto de resultados
El parámetro de salida outputs integrado de Parameters del nodo de asignación debe utilizarse como parámetro de entrada de Parameters del nodo for-each. Para obtener detalles sobre la configuración, consulte Configure an Assignment Node.
-
Recuperar parámetros en nodos internos
Personalice el flujo de trabajo interno del nodo for-each según sus requisitos empresariales. En los nodos internos, utilice variables integradas para recuperar los valores de los parámetros y ejecutar la tarea del bucle. Para obtener más información sobre las variables integradas, consulte Built-in variables. Para obtener detalles sobre la configuración, consulte Configure a for-each node.
Crear y configurar un flujo de trabajo
Cree un flujo de trabajo donde un nodo de asignación sea el nodo ascendente y un nodo for-each sea el nodo descendente.
-
Inicie sesión en la consola de DataWorks. En la región objetivo, haga clic en en el panel de navegación izquierdo. Seleccione un espacio de trabajo de la lista desplegable y haga clic en Go to Data Development.
-
Cree un nodo for-each.
-
Pase el cursor sobre el icono
y haga clic en .Alternativamente, busque el flujo de trabajo objetivo, haga clic con el botón derecho en General y seleccione .
En el cuadro de diálogo Create Node, establezca el nombre y la ruta del nodo.
Haga clic en OK.
-
-
Cree un nodo de asignación.
-
Haga doble clic en el flujo de trabajo para abrir su página de configuración. Haga clic en New Node y arrastre al lienzo de la derecha.
Para obtener más información sobre los nodos de asignación, consulte Assignment node.
En el cuadro de diálogo Create Node, establezca el nombre y la ruta del nodo. De forma predeterminada, el nodo se crea en el directorio del flujo de trabajo actual.
Haga clic en OK.
-
Arrastre una línea desde el nodo de asignación hasta el nodo for-each para establecer su dependencia.
Configurar un nodo de asignación
Haga doble clic en el nodo de asignación para abrir su página de configuración.
En la lista desplegable Language, seleccione Shell.
-
En la página de configuración del nodo, introduzca la siguiente instrucción:
echo 'this is name,ok'; -
En el panel derecho, haga clic en Scheduling. En la sección .
Haga clic en el icono de guardar
en la barra de herramientas.-
Haga clic en el icono de confirmación
en la barra de herramientas.En el cuadro de diálogo Submission, introduzca una Change Description y elija si desea solicitar una revisión de código.
ImportanteDebe configurar las propiedades Rerun attribute y Parent Nodes del nodo antes de poder confirmarlo.
La revisión de código ayuda a controlar la calidad del código y evita errores causados por el despliegue de código incorrecto en el entorno de producción sin supervisión. Si habilita la revisión de código, el nodo solo podrá desplegarse después de que los revisores lo aprueben. Para obtener más información, consulte Code review.
Si su espacio de trabajo está en modo estándar, debe hacer clic en Deploy en la esquina superior derecha de la página de configuración del nodo para desplegar la tarea en el entorno de producción después de confirmarla. Para obtener más información, consulte Deploy tasks.
Configurar un nodo for-each
-
Haga doble clic en el nodo for-each para abrir su página de configuración. De forma predeterminada, contiene un nodo de inicio, un nodo Shell y un nodo final.
Puede reemplazar el nodo Shell con otro tipo de nodo:
Si desea utilizar un nodo Shell, puede configurarlo directamente.
Para usar otro tipo de nodo, primero elimine el nodo Shell predeterminado y luego cree el nodo que necesita.
Este ejemplo utiliza un nodo Shell.
-
Edite el nodo Shell.
Haga doble clic en el nodo Shell para abrir su página de configuración.
-
Introduzca el siguiente código:
echo ${dag.loopTimes} # Print the current loop count.NotaLa lógica de los nodos de inicio y fin es fija y no se puede editar.
Después de modificar el código en el nodo Shell, debe guardar los cambios. DataWorks no le solicitará guardar los cambios cuando confirme el nodo. Si no guarda, los cambios no surtirán efecto.
El nodo for-each admite las siguientes cuatro variables integradas:
${dag.foreach.current}: La fila de datos actual sobre la que se itera.
${dag.loopDataArray}: El conjunto de datos de entrada.
${dag.offset}: El desplazamiento.
${dag.loopTimes}: El conteo actual del bucle. El valor es ${dag.offset}+1.
Para obtener más información, consulte Built-in variables y Examples of built-in variable values.
-
Configure el nodo for-each.
En la página de configuración del nodo for-each, haga clic en Scheduling en el panel derecho.
En la sección , haga clic en Modify junto al nombre de parámetro predeterminado loopDataArray.
-
En la lista desplegable Value Source, seleccione el parámetro
outputsdel nodo de asignación ascendente y haga clic en Save.NotaDespués de agregar la dependencia del nodo de asignación ascendente en la pestaña Properties, debe especificar manualmente su origen de valor. De lo contrario, se producirá un error al confirmar el nodo.
Haga clic en el icono de guardar
en la barra de herramientas para guardar el nodo for-each.-
Haga clic en el icono de confirmación
en la barra de herramientas.ImportanteDebe configurar las propiedades Rerun attribute y Parent Nodes del nodo antes de poder confirmarlo.
En el cuadro de diálogo Submission, seleccione los nodos que desea confirmar y haga clic en Determine.
Si su espacio de trabajo está en modo estándar, haga clic en Deploy en la esquina superior derecha después de confirmar correctamente el nodo. Para obtener más información, consulte Deploy tasks.
Probar el nodo y ver los resultados
En la esquina superior derecha de la página, haga clic en O&M Personnel para ir a Operation Center.
En el panel de navegación izquierdo, haga clic en .
-
Busque el nodo. En el DAG de la derecha, haga clic con el botón derecho en el nodo de asignación y seleccione .
Actualice la página Data Backfill Instance. Una vez que la instancia de relleno de datos se ejecute correctamente, haga clic en View DAG junto a la instancia.
-
Haga clic con el botón derecho en el nodo de asignación y seleccione View Runtime Log para comprobar el resultado.
El registro de ejecución muestra que el nodo de asignación se ejecutó correctamente. La salida de Shell es
this is name,ok, y el resultado se analiza como["this is name", "ok"](dos registros de datos). El nodo for-each iterará sobre estos dos registros. -
En la página Data Backfill Instance, haga clic con el botón derecho en el nodo for-each y seleccione View Inner Nodes.
-
En la página de nodos internos, haga clic en Loop 1 a la izquierda. Luego, haga clic con el botón derecho en el nodo Shell y seleccione View Runtime Log.
En la página de registro de ejecución, compruebe el registro del nodo Shell correspondiente a la primera iteración. La salida de Shell es
1, que representa el conteo actual del bucle (el valor de${dag.loopTimes}). -
De igual manera, compruebe el registro del nodo Shell correspondiente a la segunda iteración.
La salida de Shell es
2, que corresponde al conteo del bucle en la segunda iteración (el valor de${dag.loopTimes}es2). Esto verifica que el nodo for-each iteró correctamente sobre los dos registros de datos del conjunto de resultados de asignación.