如何在 OOZIE 工作流中使用逻辑运算符

how to use logical operators in OOZIE workflow

我有一个 oozie 工作流程 我正在使用决策控制节点 在谓词中我想“&&”两个不同的条件 我需要在它们之间使用“&&”以获得最终的 TRUE/FALSE 结果

我找不到此类条件的谓词语法

我正在使用这个

 <decision name="comboDecision">
        <switch>
            <case to="alpha">
              ---------
            </case>
        </switch>
  </decision>

我想做这个=

<decision name="comboDecision">
        <switch>
            <case to="alpha">
             condition1 && condition2
            </case>
        </switch>
  </decision>

谁能帮我解决语法问题?

我会用一个例子来解释这个。

假设我们有一个 Java 动作(我们称这个动作为 getAgeInfo),它输出一个人的年龄:

'person.age': Age of the person

动作:

<action name='getAgeInfo'> 
    <!--Outputs 1 property: person.age: returns age of the person--> 
    <java> 
        ..........
    </java> 
    <ok to="makeClassification" /> 
    <error to="fail" /> 
</action>

下一步是makeClassification。 在makeClassification动作中,我们根据人的年龄将人分为"child"、"teenager"、"mid-aged"或"senior-citizen"。

例如如果一个人的年龄大于或等于 (ge) 12(并且)小于 (lt) 20,我们会将此人归类为青少年,并且工作流会转换为 teenager 操作。

以下是 switch 语句,它说明了 "and" 的用法:

<decision name="makeClassification"> 
    <switch> 
        <case to="child"> 
            ${wf:actionData('getAgeInfo')['person.age'] gt 0 &&
              wf:actionData('getAgeInfo')['person.age'] lt 12} 
        </case> 
        <case to="teenager"> 
            ${wf:actionData('getAgeInfo')['person.age'] ge 12 && 
              wf:actionData('getAgeInfo')['person.age'] lt 20} 
        </case> 
        <case to="mid-aged"> 
            ${wf:actionData('getAgeInfo')['person.age'] ge 20 && 
              wf:actionData('getAgeInfo')['person.age'] lt 50} 
        </case> 
        <case to="senior-citizen"> 
            ${wf:actionData('getAgeInfo')['person.age'] ge 50} 
        </case> 
        <default to="error"/> 
    </switch> 
</decision>

你可以在这里看到另一个例子:Oozie by Example,它说明了gt(大于)、lt(小于)、逻辑或(||)、逻辑与(&&)的用法。

oozie EL functions/expression 正在使用 JSP 表达式语言语法。 from oozie's doc

您可以检查 JSP 2.0 specification 以获取语法。

针对你的问题,答案是:

<decision name="comboDecision">
    <switch>
        <case to="alpha">${(condition1) and (condition2)}</case>
        <default to="end"/>
    </switch>
</decision>