DataWorks met à disposition le nœud for-each pour itérer sur un jeu de résultats provenant d'un nœud d'affectation. Vous pouvez également personnaliser le flux de travail au sein du nœud for-each. Cette rubrique présente un exemple dans lequel un nœud for-each effectue deux itérations sur la sortie d'un nœud d'affectation et affiche le compteur de boucle actuel à chaque itération. Cela illustre sa logique et sa configuration.
Prérequis
Avant de configurer le nœud, assurez-vous de bien comprendre sa logique afin d'éviter toute erreur. Pour plus d'informations, consultez la rubrique Fonctionnement des nœuds for-each.
Procédure
Le nœud for-each est généralement utilisé conjointement avec un nœud d'affectation. La procédure générale est la suivante.

-
Définir les dépendances entre les nœuds
Un nœud for-each doit dépendre d'un nœud d'affectation. Pour les détails de configuration, consultez la section Créer et configurer un flux de travail.
-
Transmettre le jeu de résultats
Utilisez le paramètre de sortie intégré outputs du nœud d'affectation, disponible sous Parameters, comme paramètre d'entrée du nœud for-each, également sous Parameters. Pour les détails de configuration, consultez la section Configurer un nœud d'affectation.
-
Récupérer les paramètres dans les nœuds internes
Personnalisez le flux de travail interne du nœud for-each en fonction de vos besoins métier. Dans les nœuds internes, utilisez les variables intégrées pour récupérer les valeurs des paramètres et exécuter la tâche de boucle. Pour plus d'informations sur les variables intégrées, consultez la rubrique Variables intégrées. Pour les détails de configuration, consultez la section Configurer un nœud for-each.
Créer et configurer un flux de travail
Créez un flux de travail dans lequel un nœud d'affectation constitue le nœud en amont et un nœud for-each le nœud en aval.
-
Connectez-vous à la console DataWorks. Dans la région cible, cliquez sur dans le volet de navigation de gauche. Sélectionnez un espace de travail dans la liste déroulante et cliquez sur Go to Data Development.
-
Créez un nœud for-each.
-
Placez le curseur sur l'icône
et cliquez sur .Vous pouvez également rechercher le flux de travail cible, cliquer avec le bouton droit sur General et sélectionner .
Dans la boîte de dialogue Create Node , spécifiez le nom et le chemin d'accès du nœud.
Cliquez sur OK.
-
-
Créez un nœud d'affectation.
-
Double-cliquez sur le flux de travail pour ouvrir sa page de configuration. Cliquez sur New Node et faites glisser vers le canevas à droite.
Pour plus d'informations sur les nœuds d'affectation, consultez la rubrique Nœud d'affectation.
Dans la boîte de dialogue Create Node , spécifiez le nom et le chemin d'accès du nœud. Par défaut, le nœud est créé dans le répertoire du flux de travail actuel.
Cliquez sur OK.
-
Tracez une ligne reliant le nœud d'affectation au nœud for-each pour définir leur dépendance.
Configurer un nœud d'affectation
Double-cliquez sur le nœud d'affectation pour ouvrir sa page de configuration.
Dans la liste déroulante Language , sélectionnez Shell.
-
Sur la page de configuration du nœud, saisissez l'instruction suivante :
echo 'this is name,ok'; -
Dans le volet de droite, cliquez sur Scheduling. Dans la section .
Cliquez sur l'icône Enregistrer
dans la barre d'outils.-
Cliquez sur l'icône Valider
dans la barre d'outils.Dans la boîte de dialogue Submission , saisissez une Change Description et indiquez si vous souhaitez demander une revue de code.
ImportantVous devez définir les propriétés Rerun attribute et Parent Nodes pour le nœud avant de pouvoir le valider.
Une revue de code permet de contrôler la qualité du code et d'éviter les erreurs liées au déploiement de code incorrect dans l'environnement de production sans validation. Si vous activez la revue de code, le nœud ne peut être déployé qu'après approbation par les relecteurs. Pour plus d'informations, consultez la rubrique Revue de code.
Si votre espace de travail est en mode standard, vous devez cliquer sur Deploy dans le coin supérieur droit de la page de configuration du nœud pour déployer la tâche dans l'environnement de production après l'avoir validée. Pour plus d'informations, consultez la rubrique Déployer des tâches.
Configurer un nœud for-each
-
Double-cliquez sur le nœud for-each pour ouvrir sa page de configuration. Par défaut, il contient un nœud de début, un nœud Shell et un nœud de fin.
Vous pouvez remplacer le nœud Shell par un autre type de nœud :
Si vous souhaitez utiliser un nœud Shell, vous pouvez le configurer directement.
Pour utiliser un autre type de nœud, supprimez d'abord le nœud Shell par défaut, puis créez le nœud souhaité.
Cet exemple utilise un nœud Shell.
-
Modifiez le nœud Shell.
Double-cliquez sur le nœud Shell pour ouvrir sa page de configuration.
-
Saisissez le code suivant :
echo ${dag.loopTimes} # Print the current loop count.RemarqueLa logique des nœuds de début et de fin est fixe et ne peut pas être modifiée.
Après avoir modifié le code dans le nœud Shell, vous devez enregistrer vos modifications. DataWorks ne vous invite pas à enregistrer les modifications lors de la validation du nœud. Si vous n'enregistrez pas, vos modifications ne seront pas prises en compte.
Le nœud for-each prend en charge les quatre variables intégrées suivantes :
${dag.foreach.current} : la ligne de données actuelle sur laquelle porte l'itération.
${dag.loopDataArray} : le jeu de données d'entrée.
${dag.offset} : le décalage.
${dag.loopTimes} : le compteur de boucle actuel. La valeur correspond à ${dag.offset}+1.
Pour plus d'informations, consultez les rubriques Variables intégrées et Exemples de valeurs de variables intégrées.
-
Configurez le nœud for-each.
Sur la page de configuration du nœud for-each, cliquez sur Scheduling dans le volet de droite.
Dans la section , cliquez sur Modify à côté du nom de paramètre par défaut loopDataArray.
-
Dans la liste déroulante Value Source , sélectionnez le paramètre
outputsdu nœud d'affectation en amont et cliquez sur Save.RemarqueAprès avoir ajouté la dépendance au nœud d'affectation en amont dans l'onglet Propriétés, vous devez spécifier manuellement sa source de valeur. Sinon, une erreur se produit lors de la validation du nœud.
Cliquez sur l'icône Enregistrer
dans la barre d'outils pour enregistrer le nœud for-each.-
Cliquez sur l'icône Valider
dans la barre d'outils.ImportantVous devez définir les propriétés Rerun attribute et Parent Nodes pour le nœud avant de pouvoir le valider.
Dans la boîte de dialogue Submission , sélectionnez les nœuds que vous souhaitez valider et cliquez sur Determine.
Si votre espace de travail est en mode standard, cliquez sur Deploy dans le coin supérieur droit après avoir validé le nœud avec succès. Pour plus d'informations, consultez la rubrique Déployer des tâches.
Tester le nœud et afficher les résultats
Dans le coin supérieur droit de la page, cliquez sur O&M Personnel pour accéder à Operation Center.
Dans le volet de navigation de gauche, cliquez sur .
-
Repérez le nœud. Dans le DAG à droite, cliquez avec le bouton droit sur le nœud d'affectation et sélectionnez .
Actualisez la page Data Backfill Instance . Une fois l'instance de remplissage rétroactif des données exécutée avec succès, cliquez sur View DAG à côté de l'instance.
-
Cliquez avec le bouton droit sur le nœud d'affectation et sélectionnez View Runtime Log pour vérifier le résultat.
Le journal d'exécution indique que le nœud d'affectation a été exécuté avec succès. La sortie Shell est
this is name,oket le résultat est analysé en["this is name", "ok"](deux enregistrements de données). Le nœud for-each effectuera une itération sur ces deux enregistrements. -
Sur la page Data Backfill Instance , cliquez avec le bouton droit sur le nœud for-each et sélectionnez View Inner Nodes.
-
Sur la page des nœuds internes, cliquez sur Loop 1 à gauche. Ensuite, cliquez avec le bouton droit sur le nœud Shell et sélectionnez View Runtime Log.
Sur la page du journal d'exécution, vérifiez le journal du nœud Shell pour la première itération. La sortie Shell est
1, ce qui correspond au compteur de boucle actuel (la valeur de${dag.loopTimes}). -
De la même manière, vérifiez le journal du nœud Shell pour la deuxième itération.
La sortie Shell est
2, ce qui correspond au compteur de boucle pour la deuxième itération (la valeur de${dag.loopTimes}est2). Cela confirme que le nœud for-each a bien effectué une itération sur les deux enregistrements de données du jeu de résultats d'affectation.