Todos los productos
Search
Centro de documentos

DataWorks:Nodo do-while

Última actualización: Sep 25, 2026

DataWorks ofrece el nodo do-while, que implementa una lógica de bucle del tipo "ejecutar primero y comprobar después". Este nodo es ideal cuando necesita repetir una serie de tareas hasta que se cumpla una condición dinámica. Por ejemplo, sirve para sondear la existencia de un archivo o procesar datos por lotes hasta vaciar el origen. Puede orquestar un flujo de tareas dentro del cuerpo del bucle y usar un nodo End dedicado para controlar la salida del ciclo.

Escenarios de uso

En el desarrollo de datos, el nodo do-while simplifica el diseño de flujos de trabajo que necesitan ejecutar tareas repetidamente según una condición. Entre los escenarios más comunes se encuentran:

  • Sondeo de API: llama a una API de forma repetida hasta que devuelva un estado específico, como SUCCESS, o hasta que los datos de respuesta cumplan con sus requisitos.

  • Comprobación de disponibilidad de datos: espera a que se genere un archivo o una partición de datos ascendente. El bucle busca los datos en cada iteración y sale en cuanto están disponibles, lo que activa las tareas descendentes.

  • Procesamiento de datos por lotes: procesa una lista de elementos, como nombres de tablas o particiones de fecha, proporcionada por un nodo ascendente (por ejemplo, un nodo de asignación). El nodo do-while recorre la lista y procesa un elemento a la vez hasta agotarla.

  • Sincronización de estados: comprueba repetidamente el estado de un servicio externo. Cuando el estado cambia al valor deseado, como "Available" o "Complete", el bucle termina y activa el flujo de trabajo posterior de sincronización o procesamiento de datos.

Notas de uso

  • Requisitos de versión: disponible únicamente en DataWorks Standard Edition y versiones posteriores.

  • Permisos: su cuenta de RAM debe estar agregada al workspace de destino y contar con el rol de developer o workspace administrator. Para obtener más información, consulte Add members to a workspace.

Funcionamiento

El nodo do-while funciona como un contenedor de bucle basado en el mecanismo "ejecutar primero y comprobar después".

image Nodo Start → cuerpo del bucle (ejecución de tareas) → image Nodo End (evaluación de la condición)

  1. Inicio y ejecución: el bucle comienza en el nodo image. Todas las tareas del cuerpo del bucle se ejecutan como mínimo una vez.

  2. Evaluación de la condición: cuando termina el cuerpo del bucle, se ejecuta el nodo image. Escriba la lógica de la condición en este nodo.

  3. Decisión del bucle:

    • Si el nodo image devuelve la cadena True, inicia una nueva iteración desde el paso 1.

    • Si el nodo image devuelve la cadena False, el bucle finaliza y el nodo do-while se completa correctamente.

Función clave : El cuerpo del bucle siempre se ejecuta como mínimo una vez, sin importar la condición inicial.

Componentes del nodo

Haga doble clic en un nodo do-while para abrir su lienzo interno, el cual consta de tres partes principales:

  • image Start: marca el punto de entrada del bucle. No es posible editar ni eliminar este nodo.

  • Cuerpo del bucle: un lienzo personalizable para sus tareas. Haga clic en Create Internal Node para agregar diversos tipos de nodos internos, como Shell, SQL y Python, que conforman el proceso de negocio repetible.

  • image End: evalúa la condición del bucle. Este nodo es de tipo asignación y permite escribir código ODPS SQL, Shell o Python. Devuelve la cadena True o False para determinar si el bucle continúa.

Variables integradas

En el cuerpo del bucle y en el nodo End de un nodo do-while, puede usar a continuación variables integradas para obtener el estado actual del bucle y los datos de entrada:

Variable integrada

Descripción

Variables integradas del sistema

${dag.loopTimes}

Número de la iteración actual, que comienza en 1.

${dag.offset}

Desplazamiento de la iteración actual, que comienza en 0. Equivale a ${dag.loopTimes} - 1.

Uso con un nodo de asignación (suponiendo que el parámetro de entrada input está vinculado a la salida de un nodo de asignación ascendente)

${dag.input}

Recupera el conjunto de resultados completo enviado desde el nivel ascendente (normalmente una matriz bidimensional).

${dag.input.length}

Obtiene el número de filas del conjunto de resultados (la cantidad total de elementos).

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

Devuelve la fila de datos que se procesa en la iteración actual. El formato de retorno es una cadena separada por comas (por ejemplo, "user_A,beijing").

${dag.input[i][j]}

(Solo para matrices bidimensionales) Recupera el valor exacto de la fila i, columna j (los índices comienzan en 0).

Ejemplo: ${dag.input[0][1]} extrae el valor "beijing" de la primera fila y la segunda columna.

Notas

  • Requisito de edición: esta función solo está disponible en DataWorks Standard Edition y versiones superiores.

  • Límite del bucle: el número máximo predeterminado de iteraciones es 128, mientras que el máximo configurable es 1024. Si supera este límite, la tarea fallará.

  • Mecanismo de ejecución: el nodo do-while utiliza un modo de ejecución en serie y no admite procesamiento simultáneo. Cada iteración debe terminar antes de que comience la siguiente.

  • Limitación de depuración: no es posible ejecutar una prueba directamente en la página de Data Studio. Primero debe desplegar el flujo de trabajo y luego usar la función backfill data en Operation Center para comprobar la tarea.

  • Propagación de dependencias: si el nodo do-while depende de un nodo de asignación ascendente, asegúrese de iniciar el backfill desde el nodo ascendente para garantizar que la canalización de datos esté completa.

  • Control de flujo: si usa un Branch node dentro del cuerpo del bucle, asegúrese de que todas las rutas converjan finalmente en un Merge node para evitar interrumpir el flujo de trabajo.

Procedimiento: crear una tarea de bucle sencilla

Este ejemplo muestra cómo crear una tarea que se repite 5 veces e imprime el número de iteración actual en cada ciclo.

Paso 1: configurar el cuerpo del bucle (agregar un nodo Shell)

  1. Cree un nodo do-while en su flujo de trabajo.

  2. Haga doble clic en el nodo para entrar a su lienzo interno. En el área del cuerpo del bucle, haga clic en Create Internal Node, seleccione Shell y asígnele el nombre print_loop_times.

  3. Haga clic derecho en el nodo y seleccione Open Node.

  4. Introduzca el siguiente comando en el editor de código:

    # Use the built-in variable ${dag.loopTimes} to get the current loop count
    echo "This is loop number: ${dag.loopTimes}"
  5. Haga clic en el icono de guardar para guardar el nodo.

Paso 2: definir la condición de salida

  1. Regrese al lienzo interno del nodo do-while, haga clic derecho en el nodo image End y seleccione Open Node.

  2. Cambie el lenguaje a Python.

  3. Introduzca el siguiente código de Python:

    # When the loop count is less than 5, output True and continue looping
    # When the loop count reaches 5, output False and exit the loop
    if ${dag.loopTimes} < 5:
        print True
    else:
        print False
  4. Guarde el nodo End.

Paso 3: desplegar, ejecutar y comprobar

  1. Vuelva al lienzo principal del flujo de trabajo y haga clic en Deploy en la barra de herramientas para desplegar todo el flujo.

  2. Vaya a Operation Center y localice el nodo do-while.

  3. Haga clic derecho en el nodo y elija Backfill Data > Current Node para iniciar una ejecución de prueba.

  4. Una vez que la instancia se ejecute correctamente, vuelva a hacer clic derecho en el nodo y seleccione View Internal Nodes.

  5. Consulte las cinco iteraciones del bucle. Expanda cualquier iteración (por ejemplo, la quinta), haga clic derecho en la instancia print_loop_times que contiene y seleccione View Runtime Log. Debería ver la siguiente salida:

    This is loop number: 5

Uso avanzado: procesar una lista de datos con un nodo de asignación

Este es un escenario común y práctico: usar un nodo do-while para recorrer y procesar un conjunto de datos generado por un nodo de asignación ascendente. En este ejemplo, un nodo de asignación ODPS SQL ascendente consulta dos filas de información de usuarios y el nodo do-while procesa cada una de ellas.

Paso 1: configurar el nodo de asignación ascendente

  1. Cree un nodo de asignación (por ejemplo, llamado assign_sql_data) y establézcalo como ascendente del nodo do-while.

  2. Use ODPS SQL para consultar datos en el nodo:

    SELECT 'user_A', 'beijing'
    UNION ALL
    SELECT 'user_B', 'shanghai';
  3. Guarde el nodo. Su parámetro outputs generará una matriz bidimensional con dos filas de datos.

Paso 2: configurar el nodo do-while para consumir los datos

  1. En el panel Schedule Settings, ubicado a la derecha del nodo do-while, busque Input Parameters of This Node.

  2. Haga clic en Add y configure el siguiente parámetro:

    • Parameter Name: input (personalizable)

    • Value Source: seleccione assign_sql_data.outputs

  3. En el cuerpo del bucle del nodo do-while, cree un nodo Shell e introduzca el siguiente script para procesar la fila actual:

    # Get the data row being processed in the current loop iteration
    echo "Processing data row: ${dag.input[${dag.offset}]}"
  4. Abra el nodo image End y use Python para definir la condición de salida:

    # If the number of times executed is less than the total number of data rows, continue looping
    if ${dag.loopTimes} < ${dag.input.length}:
        print True
    else:
        print False
  5. Despliegue el flujo de trabajo y, en Operation Center, inicie el backfill desde el nodo assign_sql_data**** para asegurar que los datos fluyan correctamente hacia el bucle.

Tras una ejecución correcta, podrá observar en los registros que las dos iteraciones procesaron "user_A,beijing" y "user_B,shanghai", respectivamente.

Apéndice: comparación entre los nodos do-while y for-each

Función

Nodo do-while

Nodo for-each

Lógica principal

Basada en condiciones: repite la ejecución hasta que deje de cumplirse una condición.

Basada en datos: se ejecuta una vez por cada elemento de la lista de entrada.

Número de iteraciones

Indeterminado; depende del momento en que se cumpla la condición.

Determinado; equivale a la cantidad de elementos de la lista de entrada.

Garantía de ejecución

Se ejecuta como mínimo una vez (incluso si la condición inicial ya no se cumple).

Si la entrada está vacía, no se ejecuta nada.

Escenarios de uso

Sondeo, esperas, comprobaciones de estado y procesamiento por lotes hasta vaciar el origen.

Procesamiento por lotes de una lista conocida (por ejemplo, sincronizar un conjunto de tablas o procesar varias particiones).

Método de control

Lo controla el nodo End, que devuelve True o False para decidir si el bucle continúa.

Termina automáticamente después de recorrer todos los elementos.