根据Talend中的条件跳过组件

时间:2014-07-01 07:41:26

标签: talend

我有一个场景,我想根据条件跳过一个组件来执行,并在Talend中运行它的连续组件。

是否可能?

3 个答案:

答案 0 :(得分:5)

您有两种选择可以有条件地执行部分工作。

如果您的条件检查后面的组件可以是一个起始组件(如果您将它放到画布上然后它应该有一个绿色背景),那么您可以使用Run if连接器将它链接到前一个部分你的工作是这样的:

Run If Job Setup

在这个例子中,我们只是有条件地调用另一个tJava组件,但这可以是任何可启动的组件。

使用以下代码配置第一个tJava组件(设置条件布尔值):

Boolean condition = false;
globalMap.put("condition",condition);

两个Run if连接器分别设置为((Boolean)globalMap.get("condition")) == true((Boolean)globalMap.get("condition")) == false

更好的选择可能是在tMap或tFilterRow组件中使用过滤,这也允许您链接到不启动组件的组件。为此,您可以按以下方式设置工作:

tMap Conditional Job Setup

在这项工作中,我在tFixedFlowInput组件中硬编码了一些表格数据:

tMap Conditional Job Data

然后我们使用tMap过滤数据流到以下任何组件:

tMap Conditional Job Data tMap configuration

我们在其中测试数据的布尔条件列的值。作为一个例子,我还对数据应用了一些简单的条件转换,其中“true”行的值增加了1000,“false”行的值减去了100。

从这里开始,您可以正常地继续工作流程,在这种情况下,我们会链接到一个tSystem组件,根据您的评论执行系统命令。

答案 1 :(得分:4)

我为你嘲笑了一份工作:

我有一个名为:startFrom的上下文变量 可以使用context.startFrom

访问它

我已经放了几个tWarns的tJava: full overview of the job

我使用了4个上下文设置:

  1. 默认
  2. 正常
  3. 2
  4. 所以我的工作:

    1. 什么都不做
    2. 从"开始"
    3. 开始
    4. 从" Optional_Start"
    5. 开始
    6. 从" RecoverFromHere"
    7. 开始

      如果设置如下:

        

      context.startFrom.equals("选择&#34)

      Recovery and Recovery1使用System.out

      打印出他们的名字

      如果我开始工作,我可以选择我想要的地方。如果我没有选择任何内容:上下文值为空,则不会做任何事情。

      opt normal two

答案 2 :(得分:1)

you can not use prejob as it does not have runif trigger, but you can do like this
prejob -->oncomponentok-->tJava (in here you poupulate you evaluate your condition say as given below)---->RUN IF Trigger - you put your condition here..((String)globalMap.get("var_myCondition")).equals("true") --->component to run in true condition
--->RUN IF Trigger on (tJava) ---((String)globalMap.get("var_myCondition")).equals("false")--->component to run in false condition


in short your job would be like 

prejob-->tJava---(RUNIF TRIGGER)------>component/flow to run in true condition
              ---(RUNIF TRIGGER)------>component/flow to run in false condition


tJava code 
String myCondition="false";
globalMap.put("var_myCondition",myCondition);