Oozie fs:存在变量

Ger*_*erd 6 oozie

我在使用Oozie工作流定义中的变量检查是否创建了特定文件时遇到了以下问题.它使用绝对路径,如下所示,但我不能使用绝对路径:

${fs:exists('/mypath/file.hql')}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,必须替换nameNode和工作流ID,但在决策节点中,这不起作用.变量没有被替换,执行此操作的正确语法是什么?

    <decision name="check-hql-file-created">
    <switch>
        <case to="hive-exec-il2rl-hql4baseentity">
            ${fs:exists(${nameNode}'/tmp/oozie_tmp/'${wf:id()}'.hql')}
        </case>
        <default to="il2rl-loop"/>
    </switch>
</decision>
Run Code Online (Sandbox Code Playgroud)

Ger*_*erd 7

它正在使用如下的连接:

        <switch>
        <case to="hive-exec-il2rl-hql4baseentity">
            ${fs:exists(concat(concat(concat(concat(concat(nameNode, '/tmp/oozie_tmp/'), wf:id()), '_'), replaceAll(asJson, "\\{\"|,.+$", "")), '.hql')) == "true"}
        </case>
        <default to="il2rl-loop"/>
    </switch>
Run Code Online (Sandbox Code Playgroud)

  • 我也在努力解决这个问题.这适用于现有的EL表达式,但如果您具有工作流的配置属性,则可以在EL表达式中按名称引用它们.例如,`FILE_PATH`在EL表达式中不能是`$ {FILE_PATH}`,它必须是`FILE_PATH`. (2认同)