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. |
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. |
|
|
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é. |
|
|
Le nombre d'itérations d'un nœud for-each dépend de la sortie de son nœud d'affectation en amont. |
|
|
Le nœud for-each fournit des variables intégrées pour récupérer les valeurs pertinentes à chaque itération. |
|
|
Consultez des exemples illustrant la récupération des valeurs de variables et le calcul du nombre d'itérations. |
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.

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 |
|
|
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 |
|
|
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.
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.
RemarqueLorsque 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.
RemarqueLe 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
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 |
|
|
Récupère l'ensemble de données du nœud d'affectation. |
Équivalent au code suivant dans une boucle for :
|
|
|
Récupère la valeur de l'itération actuelle. |
Prenons la boucle for suivante comme exemple :
|
|
|
Le décalage actuel (le décalage de chaque itération par rapport à la première itération). |
|
|
|
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 |
|
|
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. |
|
|
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. |
|
|
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-282021-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,Cancer0016359814159,Unknown,30-40 years old,Cancer${dag.offset}0
1
${dag.loopTimes}1
2
${dag.foreach.current[0]}00163598108210016359814159${dag.loopDataArray[1][0]}0016359814159