如何在 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>
我有一个 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>