Utilisez un nœud d'affectation pour transmettre les résultats de requêtes ou la sortie d'un nœud en amont aux nœuds en aval. Le nœud d'affectation prend en charge ODPS SQL, Python 2 et Shell. Il affecte automatiquement le dernier résultat de requête ou la dernière sortie au paramètre de sortie intégré (outputs). Les nœuds en aval peuvent référencer ce paramètre pour récupérer la sortie.
Remarques sur l'utilisation
Exigences de version : Disponible uniquement dans DataWorks Standard Edition et versions ultérieures.
Autorisations : Votre compte RAM doit être ajouté à l'espace de travail cible et se voir attribuer le rôle developer ou workspace administrator. Pour plus d'informations, consultez la rubrique Ajouter des membres à un espace de travail.
Concepts clés : Transmission et référencement des paramètres
La fonction principale d'un nœud d'affectation est la transmission de paramètres, qui permet de transférer les données produites par un nœud en amont vers les nœuds en aval.
Nœud d'affectation en amont : Produit les données. Il affecte automatiquement la dernière sortie ou le dernier résultat de requête à un paramètre de sortie de nœud nommé
outputs.Nœud métier en aval : Reçoit et utilise les données. Ajoutez un paramètre d'entrée de nœud (par exemple,
param) à la configuration du nœud et mappez-le au paramètreoutputsdu nœud d'affectation en amont pour référencer les données dans votre code.
Format de sortie par langage
Le format de sortie du nœud d'affectation varie selon le langage utilisé :
Langage | Source de sortie | Format de sortie |
ODPS SQL | Sortie de la dernière instruction | La sortie est transmise sous forme de tableau à deux dimensions aux nœuds en aval. |
Python 2 | Sortie de la dernière instruction | La sortie est convertie en chaîne et divisée par une virgule ( Par exemple, si la dernière ligne du nœud d'affectation produit la sortie |
Shell | Sortie de la dernière instruction |
Procédure
L'exemple suivant transmet la sortie d'un nœud d'affectation ODPS SQL à un nœud Shell. En pratique, n'importe quel nœud peut servir de nœud en aval.
-
Configurer le nœud d'affectation en amont
Dans un workflow, créez et modifiez un nœud d'affectation. Sur la page de l'éditeur de code, sélectionnez ODPS SQL, Python ou Shell selon vos besoins, puis écrivez le code qui produit le résultat à transmettre en aval.
-
Configurer le nœud Shell en aval
Créez un nœud Shell. Sur la page de l'éditeur du nœud Shell, référencez le résultat en amont :
Sur la page de l'éditeur du nœud Shell, cliquez sur Scheduling configuration à droite et sélectionnez l'onglet Node context.
Dans la section Input parameters, cliquez sur Add.
-
Dans la boîte de dialogue qui s'affiche, sélectionnez le paramètre
outputsdu nœud d'affectation en amont et spécifiez un nom de paramètre pour le paramètre d'entrée du nœud actuel (par exemple,param).Une fois la configuration terminée, le nœud en aval établit automatiquement une dépendance vis-à-vis du nœud d'affectation en amont.
Une fois la configuration des paramètres terminée, référencez la valeur transmise depuis le nœud en amont dans le code du nœud Shell en aval en utilisant le format
${param}.
-
Exécuter et vérifier
Double-cliquez sur le nom du workflow. Sur la page de l'éditeur de workflow, cliquez sur l'icône Exécuter dans la barre d'outils pour lancer le workflow et vérifier que le résultat référencé est correct. Vous pouvez également valider le nœud dans l'environnement de production, accéder à Operation Center et effectuer un test de fumée pour valider l'exécution.
Limites
Portée : Les paramètres du nœud d'affectation ne peuvent être transmis qu'aux nœuds en aval immédiats. La transmission entre niveaux non adjacents n'est pas prise en charge.
Limite de taille : La valeur de sortie ne peut pas dépasser 2 Mo. Si la sortie dépasse cette limite, le nœud d'affectation échoue.
-
Restrictions syntaxiques :
Les commentaires ne sont pas pris en charge dans le code du nœud d'affectation. L'ajout de commentaires peut entraîner des résultats d'exécution anormaux.
La clause WITH n'est pas prise en charge en mode ODPS SQL.
Exemples par langage
Le format de sortie (outputs) et la méthode de référencement pour les nœuds en aval varient selon le langage.
Exemple 1 : Transmettre un résultat de requête ODPS SQL
Les résultats de requête SQL sont transmis aux nœuds en aval sous forme de tableau à deux dimensions.
-
Configuration du nœud en amont (nœud d'affectation - SQL)
Supposons que le code SQL soit le suivant et que la requête renvoie deux lignes et deux colonnes :
SELECT 'beijing', '1001' UNION ALL SELECT 'hangzhou', '1002'; -
Configuration et sortie du nœud en aval (nœud Shell)
Dans le nœud Shell, ajoutez un paramètre d'entrée nommé
regionet référencez le paramètreoutputsdu nœud SQL en amont.Écrivez le code suivant pour lire les données :
echo "Entire result set: ${region}" echo "First row: ${region[0]}" echo "First row, second field: ${region[0][1]}"DataWorks analyse directement le paramètre et effectue une substitution statique. La sortie est la suivante :
Entire result set: beijing,1001 hangzhou,1002 First row: beijing,1001 First row, second field: 1001
Exemple 2 : Transmettre les résultats de sortie Python 2
La sortie de l'instruction print de Python 2 est divisée par des virgules (,) et transmise aux nœuds en aval sous forme de tableau à une dimension.
-
Configuration du nœud en amont (nœud d'affectation - Python 2)
Le code Python 2 est le suivant :
print 'Electronics, Clothing, Books'; -
Configuration et sortie du nœud en aval (nœud Shell)
Dans le nœud Shell, ajoutez un paramètre d'entrée nommé
typeset référencez le paramètreoutputsdu nœud d'affectation en amont.Écrivez le code suivant pour lire les données :
# Directly output the entire one-dimensional array echo "Entire result set: ${types}" # Output elements by index echo "Second element: ${types[1]}"DataWorks analyse directement le paramètre et effectue une substitution statique. La sortie est la suivante :
Entire result set: Electronics,Clothing,Books Second element: Clothing
La logique de traitement pour les nœuds Shell est similaire à celle de Python 2 et n'est pas répétée ici.
FAQ
-
Q : Pourquoi l'erreur « find no select sql in sql assignment! » se produit-elle en mode ODPS SQL ?
R : Le script ODPS SQL ne contient pas d'instruction SELECT. Ajoutez une instruction SELECT. La clause WITH n'est pas prise en charge en mode ODPS SQL. L'utilisation d'une clause WITH déclenche également cette erreur.
-
Q : Pourquoi la sortie ne correspond-elle pas aux attentes en mode Shell ou Python ?
R : Vérifiez si les éléments de sortie contiennent des virgules. Si c'est le cas, échappez les virgules dans le nœud d'affectation et restaurez-les dans le nœud en aval.
-
Q : Un nœud en aval peut-il recevoir les sorties de plusieurs nœuds d'affectation en amont ?
R : Oui. Attribuez différents paramètres d'entrée pour recevoir les sorties de différents nœuds d'affectation.
-
Q : Le nœud d'affectation prend-il en charge d'autres langages que ODPS SQL, Python 2 et Shell ?
R : Le nœud d'affectation prend uniquement en charge ODPS SQL, Python 2 et Shell. Cependant, certains types de nœuds, tels que EMR Hive, Hologres SQL, EMR Spark SQL, AnalyticDB for PostgreSQL, ClickHouse SQL et MySQL, offrent des capacités intégrées d'affectation de paramètres qui permettent d'obtenir le même résultat.
Documentation connexe
Lorsque le nœud en aval est un nœud for-each ou do-while, consultez les rubriques Configurer un nœud for-each et Configurer un nœud do-while pour obtenir des instructions sur l'utilisation de ces nœuds avec des nœuds d'affectation.