Todos los productos
Search
Centro de documentos

DataWorks:Funcionamiento de los nodos do-while

Última actualización: Sep 04, 2026

DataWorks ofrece el nodo do-while para ejecutar un conjunto de tareas en bucle. Es posible orquestar la lógica de negocio dentro de este nodo y utilizar su nodo end interno para definir la condición de salida. El nodo do-while se puede usar de forma independiente o junto con un nodo de asignación para iterar sobre el conjunto de datos que este último transmite. Este tema describe los componentes y la lógica de aplicación del nodo do-while.

Contexto

A continuación se presenta una descripción general de este tema.

Descripción

Referencias

Límites y precauciones para los nodos do-while, incluido el número máximo de iteraciones, métodos de prueba y visualización de registros.

Limitations, Precautions

Personalización del flujo de trabajo interno, que debe comenzar con el nodo start integrado y terminar con el nodo end integrado.

Components and workflow orchestration

Uso de variables integradas para obtener parámetros de bucle, con ejemplos de recuperación de valores.

Built-in variables, Value retrieval examples

Cómo el nodo end controla la salida del bucle, con muestras de código.

Sample code: Exit a loop by using the end node

Revise los casos de uso típicos del nodo do-while.

Use case 1: Use with an assignment node y Use case 2: Use with branch and merge nodes

Límites

  • El nodo do-while solo está disponible en DataWorks Standard Edition y versiones posteriores. Para más información, consulte DataWorks editions and features.

  • Un nodo do-while puede realizar un máximo de 1,024 iteraciones.

  • No se admite la ejecución paralela. Una nueva iteración solo puede comenzar después de que finalice la anterior.

Precauciones

Dimensión

Elemento

Descripción

Compatibilidad con bucles

Número máximo de iteraciones

Un nodo do-while puede realizar un máximo de 1,024 iteraciones. Si el número de iteraciones controlado por el nodo end supera las 1,024, el nodo reporta un error.

Nodos internos

Orquestación del flujo de trabajo

  • Al personalizar la tarea de bucle, puede eliminar dependencias entre nodos internos y reorganizar el flujo de trabajo. Sin embargo, el flujo debe comenzar con el nodo start y terminar con el nodo end.

  • Si utiliza un nodo de rama para juicios lógicos o iteración de resultados dentro de un nodo do-while, también debe usar un merge node.

  • No es posible agregar comentarios al código de un nodo end.

Recuperación de valores

El nodo proporciona built-in variables para recuperar valores específicos de un nodo de asignación ascendente.

Depuración

Depuración de tareas

En espacios de trabajo en modo estándar, no es posible probar un nodo do-while directamente en DataStudio.

En su lugar, debe enviar la tarea que contiene el nodo al entorno de desarrollo y ejecutarla en Operation Center.

Visualización de registros

Para consultar los registros de ejecución de un nodo do-while en Operation Center, haga clic con el botón derecho en la instancia y seleccione View Inner Nodes.

Dependencias

Configuración de dependencias

Un nodo do-while se puede usar de forma independiente o junto con un nodo de asignación. No obstante, al realizar un backfill de datos en Operation Center, debe seleccionar ambos nodos para su ejecución. Ejecutar únicamente el nodo do-while impide que reciba valores del nodo de asignación.

Componentes y orquestación del flujo de trabajo

Un nodo do-while es un nodo contenedor especial que alberga un flujo de trabajo interno. Al crear un nodo do-while, se generan automáticamente tres nodos internos: un nodo start (inicio del bucle), un nodo shell (tarea del bucle) y un nodo end (condición de fin del bucle). Estos nodos internos se organizan en un flujo de trabajo para la ejecución iterativa de tareas.循环节点

  • Nodo start

    Marca el inicio del bucle. No contiene código de tarea y no se puede eliminar. Todos los demás nodos del bucle deben depender del nodo start, ya sea directa o indirectamente.

  • Lógica del bucle

    De forma predeterminada, DataWorks crea un nodo shell interno para la tarea del bucle. Puede eliminar el nodo shell predeterminado y construir un flujo de trabajo de negocio personalizado dentro del bucle.

    Por lo general, el flujo de trabajo del bucle se usa junto con un nodo de asignación, un nodo de rama o un nodo de fusión. Al personalizar las tareas del bucle, puede eliminar dependencias entre nodos internos y reorganizar el flujo de trabajo. Sin embargo, el flujo debe comenzar con el nodo start y terminar con el nodo end.

  • Nodo end

    • El nodo end define la condición de bucle para el nodo do-while. Funciona de manera similar a un nodo de asignación, y genera como resultado true para continuar con la siguiente iteración o false para finalizarla.

    • Puede escribir el código de la condición de bucle para el nodo end mediante ODPS SQL, Shell o Python 2. El nodo do-while proporciona variables integradas para simplificar este código. Para más información sobre las variables integradas, consulte Built-in variables y Value retrieval examples. Para ver muestras de código en diferentes lenguajes, consulte Sample code: Exit a loop by using the end node.

    • Todos los nodos dentro del bucle deben ser ascendentes respecto al nodo end, el cual no se puede eliminar.

Variables integradas

Un nodo do-while utiliza el formato ${dag.variable_name} para recuperar variables. DataWorks proporciona dos variables integradas del sistema: ${dag.loopTimes} y ${dag.offset}. También puede usar el nodo do-while junto con un nodo de asignación y emplear el formato ${dag.variable_name} para recuperar valores de los parámetros de asignación.

  • Variables integradas del sistema

    En cada iteración del bucle, puede usar variables integradas para obtener el número de iteración actual y el desplazamiento.

    Variable integrada

    Descripción

    Valor

    ${dag.loopTimes}

    El número de iteración actual.

    El valor es 1 para la primera iteración, 2 para la segunda, 3 para la tercera, y así sucesivamente, hasta n para la enésima iteración.

    ${dag.offset}

    El desplazamiento.

    El valor es 0 para la primera iteración, 1 para la segunda, 2 para la tercera, y así sucesivamente, hasta n-1 para la enésima iteración.

  • Recuperación de resultados de un nodo de asignación

    Si utiliza un nodo do-while con un assignment node, también puede recuperar los valores de los parámetros de la asignación.

    Nota

    Cuando un nodo do-while depende de un nodo de asignación, puede establecer los parámetros de salida del nodo de asignación como los Input Parameters del nodo do-while. Esto permite que el nodo do-while recupere el conjunto de resultados del nodo de asignación y una fila específica dentro de dicho conjunto. El formato es ${dag.variable_name}, donde variable_name debe configurarse como uno de los Input Parameters del nodo do-while. El ejemplo en este tema define el parámetro input (un Input Parameters) en el nodo do-while para recibir el conjunto de resultados del nodo de asignación. En la práctica, debe reemplazar esto con el nombre real de su parámetro.

    Variable integrada

    Descripción

    ${dag.input}

    El conjunto de datos transmitido desde el nodo de asignación ascendente.

    ${dag.input[${dag.offset}]}

    Recupera la fila de datos correspondiente a la iteración actual.

    ${dag.input.length}

    Recupera la longitud del conjunto de datos.

Ejemplos de recuperación de valores

El formato del conjunto de resultados de un nodo de asignación depende de su lenguaje. Para recuperar resultados de un nodo de asignación basado en Shell, utilice un arreglo unidimensional. Para un nodo de asignación basado en ODPS SQL, utilice un arreglo bidimensional. Para más información, consulte assignment node.

Ejemplo 1: Nodo de asignación Shell

  • Salida del nodo

    El nodo de asignación ascendente utiliza sintaxis Shell, y su última salida es 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Valores de las variables

    Variable integrada

    Valor en la iteración 1

    Valor en la iteración 2

    ${dag.input}

    2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01

    ${dag.input[${dag.offset}]}

    2021-03-28

    2021-03-29

    ${dag.input.length}

    5

    ${dag.loopTimes}

    1

    2

    ${dag.offset}

    0

    1

Ejemplo 2: Nodo de asignación ODPS SQL

  • Salida del nodo

    El nodo de asignación ascendente utiliza sintaxis ODPS SQL, y la última sentencia SELECT devuelve dos filas:

    +----------------------------------------------+
    | uid            | region         | age_range      | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old| Cancer |
    | 0016359814159  | Unknown        | 30-40 years old| Cancer |
    +----------------------------------------------+
  • Valores de las variables

    Variable integrada

    Valor en la iteración 1

    Valor en la iteración 2

    ${dag.input}

    +----------------------------------------------+
        | uid            | region         | age_range      | zodiac |
        +----------------------------------------------+
        | 0016359810821  | Hubei Province | 30-40 years old| Cancer |
        | 0016359814159  | Unknown        | 30-40 years old| Cancer |
        +----------------------------------------------+

    ${dag.input[${dag.offset}]}

    0016359810821,Hubei Province,30-40 years old,Cancer

    0016359814159,Unknown,30-40 years old,Cancer

    ${dag.input.length}

    2

    Nota

    La longitud del conjunto de datos corresponde al número de filas en el arreglo bidimensional.

    ${dag.input[0][1]}

    Nota

    El valor en la primera fila y segunda columna del arreglo bidimensional.

    Hubei Province

    ${dag.loopTimes}

    1

    2

    ${dag.offset}

    0

    1

Muestras de código del nodo end

Puede escribir el código para el nodo end en ODPS SQL, Shell o Python 2. Esta sección proporciona muestras de código para cada lenguaje.

ODPS SQL

SELECT  CASE 
 WHEN COUNT(1) > 0 AND ${dag.offset}<= 9 
  THEN true 
  ELSE false 
 END 
FROM  xc_dpe_e2.xc_rpt_user_info_d  where dt='20200101';

En este ejemplo, el código del nodo end limita el número total de iteraciones al comparar el recuento de filas de la tabla y el desplazamiento del bucle con valores fijos.

Shell

if [ ${dag.loopTimes} -lt 5 ];
then
     echo "True"
else
     echo "False"
fi

Este código compara el número de iteración actual, ${dag.loopTimes}, con 5 para limitar el número total de iteraciones.

Por ejemplo, ${dag.loopTimes} es 1 para la primera iteración y 2 para la segunda. Cuando su valor alcanza 5 en la quinta iteración, la condición se vuelve falsa, el nodo end genera False como salida y el bucle termina.

Python 2

if ${dag.loopTimes}<${dag.input.length}:
   print True;
else
   print False;
# If the end node outputs True, the next loop starts.
# If the end node outputs False, the loop terminates.

Este código limita el número de iteraciones al comparar el número de iteración actual (${dag.loopTimes}) con la longitud del conjunto de datos proveniente del nodo de asignación.

Casos de uso

Nodo de asignación

A continuación se describe un escenario típico y las precauciones para usar un nodo do-while con un assignment node.

Escenario

Configuración

Paso de parámetros

Si un nodo interno dentro de un do-while node necesita recuperar la salida de un nodo ascendente (como el nodo up_node) en cada iteración, utilice un nodo de asignación (como el nodo assign_node) para pasar los parámetros.

  • Dependencias

    El nodo do-while debe depender del nodo de asignación ascendente (assign_node).

    Nota

    Establezca esta dependencia en el propio nodo do-while, no en ninguno de sus nodos internos (como un shell node).

  • Parámetros de contexto

    • Debe definir los parámetros de salida en la sección Output Parameters del nodo de asignación (assign_node).

    • Debe agregar los parámetros de salida del nodo de asignación a la sección Input Parameters del nodo de tarea de bucle interno (shell node) del nodo do-while.

      Nota

      Esta asignación de parámetros se configura en el nodo de tarea de bucle interno, no en el propio nodo do-while.

En los Output Parameters del nodo de asignación, se agrega de forma predeterminada un parámetro llamado outputs con el valor ${outputs}. En el contexto de nodos del nodo de tarea de bucle interno (el nodo shell), agregue este parámetro como uno de los Input Parameters (por ejemplo, con el nombre de parámetro input). En el script de shell, puede usar variables como ${dag.input} y ${dag.offset} para hacer referencia al valor de salida transmitido desde el nodo de asignación.

Nodos de rama y fusión

A continuación se describe un escenario típico y las precauciones para usar un nodo do-while con un branch node y un merge node.典型应用

Caso de uso

Precaución

Para realizar juicios lógicos o iterar sobre resultados dentro de un nodo do-while, utilice un nodo de rama (como branch_node) y un nodo de fusión (como merge_node) para personalizar el flujo de trabajo interno.

Dentro de un nodo do-while, un nodo de rama (como branch_node) debe combinarse con un nodo de fusión (como merge_node).