Tous les produits
Search
Centre de documentation

DataWorks:Comprendre la logique du nœud for-each

Dernière mise à jour :Aug 09, 2026

DataWorks met à votre disposition le nœud for-each, qui permet de parcourir en boucle l'ensemble de résultats issu d'un nœud d'affectation et d'orchestrer un flux métier. Cette rubrique décrit les composants et la logique du nœud for-each.

Remarques d'utilisation

Le tableau suivant décrit l'utilisation du nœud for-each.

Description

Références

Découvrez les scénarios d'utilisation du nœud for-each.

Scénarios

Remarque

Cette fonctionnalité sert uniquement à parcourir l'ensemble de résultats renvoyé par le nœud d'affectation.

Consultez les limites et remarques concernant le nœud for-each, notamment le nombre maximal d'itérations, les méthodes de test et la consultation des journaux.

Limites, Remarques

Personnalisez le flux métier au sein d'un nœud for-each. Le flux doit impérativement commencer par le nœud Start intégré et se terminer par le nœud End intégré.

Composants du nœud et orchestration du flux

Le nombre d'itérations d'un nœud for-each dépend de la sortie de son nœud d'affectation en amont.

Nombre d'itérations

Le nœud for-each fournit des variables intégrées pour récupérer les valeurs pertinentes à chaque itération.

Variables intégrées

Consultez des exemples illustrant la récupération des valeurs de variables et le calcul du nombre d'itérations.

Exemples de récupération de valeurs lorsque le nœud d'affectation en amont est un nœud Shell ou ODPS SQL

Scénarios

Le nœud for-each de DataWorks s'utilise principalement dans les scénarios nécessitant des boucles. Il doit être associé à un nœud d'affectation en amont. Le nœud for-each reçoit la sortie du nœud d'affectation, puis parcourt les résultats en boucle.

for-each

Limites

  • Le nœud for-each est pris en charge uniquement dans DataWorks Standard Edition et les éditions supérieures. Pour plus d'informations, consultez la page Détails des fonctionnalités par version.

  • Un nœud for-each peut effectuer au maximum 1 024 itérations. Le nombre réel d'itérations dépend de l'ensemble de résultats produit par le nœud d'affectation.

  • L'exécution simultanée n'est pas prise en charge. Une nouvelle boucle ne peut démarrer qu'une fois la précédente terminée.

Remarques

Dimension

Catégorie

Description

Dépendances en amont et en aval

Paramètres de dépendance

Le nœud for-each parcourt les valeurs transmises par un nœud d'affectation. Par conséquent, le nœud d'affectation doit être un nœud en amont du nœud for-each.

Prise en charge du parcours

Nombre maximal d'itérations

Un nœud for-each prend en charge un maximum de 1 024 boucles. Si cette limite est dépassée, une erreur d'exécution se produit. Le nombre réel de boucles est contrôlé par la sortie du nœud d'affectation en amont.

Nombre d'itérations

Déterminé par l'ensemble de résultats produit par le nœud d'affectation.

Nœuds internes

Orchestration du flux

  • Supprimez les dépendances entre les nœuds internes d'un nœud for-each et réorganisez le flux métier interne. Toutefois, le Start node et le End node doivent respectivement constituer le premier et le dernier nœud du flux métier interne.

  • Si vous utilisez un nœud de branche à l'intérieur d'un nœud for-each pour des jugements logiques ou le parcours des résultats, vous devez également utiliser un nœud de fusion.

Récupération des valeurs

Des variables intégrées permettent de récupérer des valeurs spécifiques depuis le nœud d'affectation en amont.

Débogage et exécution

Débogage des tâches

  • En mode standard, DataWorks ne prend pas en charge le test et l'exécution directs des nœuds for-each dans l'interface DataStudio.

    Pour tester et vérifier les résultats d'exécution d'un nœud for-each, validez et publiez la tâche contenant le nœud for-each vers le Centre d'opérations de l'environnement de développement. Exécutez ensuite la tâche du nœud for-each dans le Centre d'opérations de l'environnement de développement.

  • Exécutez le nœud d'affectation et le nœud for-each simultanément. Lorsque vous effectuez une opération de remplissage des données pour une tâche déclenchée automatiquement dans le Centre d'opérations, démarrez le remplissage des données à partir du nœud d'affectation. Cela garantit l'exécution du nœud d'affectation et du nœud for-each. N'exécutez pas le nœud for-each séparément.

Affichage des journaux

Lorsque vous consultez le journal d'exécution d'un nœud for-each dans le Centre d'opérations, faites un clic droit sur l'instance et cliquez sur View Inner Nodes pour afficher les journaux d'exécution des nœuds internes.

Composants du nœud et orchestration du flux

Le nœud for-each dans DataWorks est un type spécial de nœud contenant des nœuds internes. Lors de la création d'un nœud for-each, trois nœuds internes sont automatiquement générés : un Start node (début de boucle), un Shell node (tâche de boucle) et un End node (fin de boucle). Ces nœuds internes forment un flux interne qui parcourt en boucle la sortie du nœud d'affectation en amont.for-each内部节点 Comme illustré dans la figure précédente :

  • Shell node

    Par défaut, DataWorks crée un nœud interne Shell pour exécuter les tâches. Vous pouvez également supprimer le Shell node par défaut et personnaliser le nœud pour la tâche de parcours en boucle.

    • Si la tâche de parcours en boucle est une tâche Shell, double-cliquez sur le Shell node pour ouvrir l'éditeur de code et développer le code de la tâche.

    • Si la tâche de parcours en boucle est complexe, créez d'autres nœuds de tâche dans le flux interne et reconstruisez le processus d'exécution du nœud selon vos besoins.

      Remarque

      Lorsque vous personnalisez un nœud de tâche de boucle, vous pouvez supprimer les dépendances entre les nœuds internes et réorganiser le flux interne. Toutefois, le Start node et le End node doivent rester respectivement le premier et le dernier nœud du flux interne.

  • Start node et End node

    Il s'agit des nœuds de début et de fin pour chaque boucle du flux interne. Ils ne contiennent aucun code de tâche spécifique.

    Remarque

    Le nœud End d'un nœud for-each ne contrôle pas le nombre de boucles. Ce nombre est déterminé par la sortie du nœud d'affectation en amont.

Nombre d'itérations

Remarque

Un nœud for-each peut effectuer au maximum 1 024 itérations. Le nombre réel d'itérations dépend de l'ensemble de résultats produit par le nœud d'affectation.

Le nombre d'itérations dépend de l'ensemble de résultats produit par le nœud d'affectation :

  • Parcours Shell et Python : la sortie est un tableau à une dimension. Le nombre de boucles correspond au nombre d'éléments du tableau. Les éléments sont séparés par des virgules.

    Par exemple, si le langage d'affectation du nœud d'affectation est Shell ou Python (Python 2) et que la sortie est le tableau à une dimension 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01, le nœud for-each effectue cinq boucles.

  • Parcours SQL : la sortie est un tableau à deux dimensions. Le nombre de boucles correspond au nombre de lignes du tableau.

    Par exemple, si le langage d'affectation du nœud d'affectation est ODPS SQL et que la sortie est un tableau à deux dimensions :

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

    Le nœud for-each effectue deux boucles.

Variables intégrées

Utilisez les méthodes suivantes dans les nœuds internes d'un nœud for-each pour récupérer l'ensemble de résultats depuis le nœud d'affectation en amont. Si un nœud d'affectation existe dans le flux interne du nœud for-each, récupérez les valeurs en utilisant la méthode de récupération de valeurs par défaut pour les nœuds en aval. Pour plus d'informations sur la méthode de récupération des valeurs, consultez la page Nœud d'affectation.

Lorsqu'un nœud for-each de DataWorks parcourt en boucle la sortie d'un nœud d'affectation, utilisez des variables intégrées pour récupérer le numéro de boucle actuel et le décalage.

Variable intégrée

Description

Comparaison avec une boucle for

${dag.loopDataArray}

Récupère l'ensemble de données du nœud d'affectation.

Équivalent au code suivant dans une boucle for :

data=[]

${dag.foreach.current}

Récupère la valeur de l'itération actuelle.

Prenons la boucle for suivante comme exemple :

for(int i=0;i<data.length;i++) {
   print(data[i]);
}
  • data[i] est équivalent à ${dag.foreach.current}.

  • i est équivalent à ${dag.offset}.

${dag.offset}

Le décalage actuel (le décalage de chaque itération par rapport à la première itération).

${dag.loopTimes}

Récupère le nombre actuel d'itérations.

-

Si vous connaissez le schéma de table de votre sortie, utilisez les variables suivantes pour récupérer d'autres valeurs.

Autre variable

Description

${dag.foreach.current[n]}

Lorsque la sortie du nœud d'affectation en amont est un tableau à deux dimensions, cette variable récupère les données d'une colonne spécifique dans la ligne de données actuelle lors de chaque itération.

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

Lorsque la sortie du nœud d'affectation en amont est un tableau à deux dimensions, cette variable récupère les données situées à la ligne i et à la colonne j de l'ensemble de données.

${dag.foreach.current[n]}

Lorsque la sortie du nœud d'affectation en amont est un tableau à une dimension, cette variable récupère les données à un index spécifique.

Exemples d'utilisation des variables intégrées

Exemple 1 : Le nœud d'affectation en amont est un nœud Shell

  • Sortie du nœud d'affectation

    Le nœud d'affectation en amont est un nœud Shell. La sortie finale est 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Récupération des valeurs dans le nœud for-each

    Remarque

    Étant donné que la sortie est un tableau à une dimension contenant cinq éléments séparés par des virgules, le nœud for-each effectue cinq boucles.

    Variable intégrée

    Valeur dans la 1re boucle

    Valeur dans la 2e boucle

    ${dag.loopDataArray}

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

    ${dag.foreach.current}

    2021-03-28

    2021-03-29

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[3]}

    2021-03-30

Exemple 2 : Le nœud d'affectation en amont est un nœud ODPS SQL

  • Sortie du nœud d'affectation

    Le nœud d'affectation en amont est un nœud ODPS SQL. La dernière instruction select renvoie deux enregistrements :

    +----------------------------------------------+
    | uid            | region         | age_range       | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old | Cancer |
    | 0016359814159  | Unknown        | 30-40 years old | Cancer |
    +----------------------------------------------+
  • Récupération des valeurs dans le nœud for-each

    Remarque

    Étant donné que la sortie est un tableau à deux dimensions comportant deux lignes, le nœud for-each effectue deux itérations.

    Variable intégrée

    Valeur dans la 1re boucle

    Valeur dans la 2e boucle

    ${dag.loopDataArray}

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

    ${dag.foreach.current}

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

    0016359814159,Unknown,30-40 years old,Cancer

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[0]}

    0016359810821

    0016359814159

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

    0016359814159