Passez un composant basé sur la condition de Talend
J'ai un scénario où je voudrais passer d'un composant à exécuter en fonction de l'état et d'exécuter ses consécutives composants Talend.
Est-il possible?
- Veuillez poster une capture d'écran de votre travail. En fonction de ce que vous faites avec votre travail, vous pouvez exécuter conditionnellement sous-jobs permettant à l'aide de la
Run if
connecteur (plutôt queMain
ouon Subjob Okay
). - Vous êtes de droite. Je peux mettre conditionnelle de la dépendance à l'aide de l'Exécuter Si le connecteur. Si la condition satisfait le composant va s'exécuter, mais si non, alors je voudrais ignorer cette composante et aller à son composant suivant.
- Pouvez-vous poster une capture d'écran de votre travail (et plus de captures d'écran de n'importe où important) afin que nous puissions voir la meilleure façon de le faire? Je ne peux penser à quelques options, mais cela dépend de ce que vous faites avec le travail.
- nous avons à faire quelque chose de similaire, le scénario est le suivant: Drop Schema Cascade -> Create Schema -> sous-job ( Drop table, create table) -> charger des données dans des tables, nous voulons avoir un DROP_SCHEMA booléenne dans le contexte, donc le premier élément doit être exécutée lorsque DROP_SCHEMA = 1 sinon il doit être ignorée.
- Comme exactement comme Balazs mentionné. Considérer la tâche comme ici Pre_Job --> évaluation de l'état --> tSystem1 --> tSystem2 Si la condition de la variable est alors le flux naturel comme tSystem1 et puis tSystem2. Mais si la condition de la variable saya tSystem2 puis passez tSystem1 et exécuter tSystem2 seul. Je pouvais pas poster tout les captures d'écran. donc, juste expliqué au sens figuré.
Vous devez vous connecter pour publier un commentaire.
J'ai fait la maquette du travail pour vous:
J'ai une variable de contexte appelé: startFrom
Il peut être consulté avec le contexte.startFrom
J'ai placé un tJava avec un peu de tWarns:
J'utilise 4 contexte paramètres:
Donc, mon Travail:
Si les paramètres sont les suivants:
De récupération et Recovery1 imprime leurs noms à l'aide du Système.hors
Si je commence mon travail, je peux choisir où je veux le lancer. Si je ne sélectionnez rien: contexte, la valeur est null, il ne fera rien.
Vous avez deux options s'offrent à vous pour conditionnellement de l'exécution de votre travail.
Où le composant qui suit votre contrôle conditionnel peut être un départ composant (si vous le déposez sur la toile, alors il doit avoir un fond vert), alors vous pouvez utiliser le
Run if
connecteur pour le relier à la partie antérieure de votre travail comme suit:Dans cet exemple, nous appelons simplement un autre composant tJava conditionnellement mais ce pourrait être n'importe quel composant qui est de la lancer.
Où le premier composant tJava (Set condition booléenne) est configuré avec le code suivant:
Et les deux
Run if
connecteurs sont définis comme((Boolean)globalMap.get("condition")) == true
et((Boolean)globalMap.get("condition")) == false
respectivement.Une meilleure option peut être d'utiliser le filtrage dans un tMap ou tFilterRow composant et cela permet aussi d'avoir accès à des composants qui ne sont pas les composants de démarrage. Pour ce faire, vous définissez votre travail comme ci-dessous:
Dans ce travail, j'ai codé en dur certains tableaux de données dans un composant tFixedFlowInput:
Nous utilisons ensuite un tMap pour filtrer le flux de données à des composants suivants:
Dans lequel nous testons la valeur de la condition booléenne colonne de nos données. Comme une illustration, j'ai également appliqué un peu simple, conditionnel transformation de données où les "vrais" lignes ont 1000 ajouté à leur valeur "false" les lignes ont 100 soustrait de leur valeur.
À partir d'ici vous pouvez ensuite continuer sur le flux de votre travail comme d'habitude, dans ce cas, un lien vers un tSystem composant pour exécuter des commandes systèmes, comme par votre commentaire.