【问题标题】:Execute a query to MySQL from Oozie从 Oozie 执行对 MySQL 的查询
【发布时间】:2015-12-23 21:03:17
【问题描述】:

oozie 是否有任何东西可以让我在 MySQL(或任何其他关系数据库上执行查询?)

我需要在我的 oozie 工作中查询一个 mysql 表并提取一个日期。仅当日期等于或大于当前时间戳时,作业才应继续。

我所有的谷歌搜索都显示 Oozie 可以进行 HIVE 查询,但我需要查询 MySQL 表。

最好的方法是什么?我应该写一个自定义的 EL 函数吗?

【问题讨论】:

  • Jdbc 客户端将完成这项工作。
  • 你能给我举个例子吗?非常感谢您的帮助
  • 如果您使用 Java,则使用任何 Java 客户端从数据库中查询并将输出传递给 oozie 的切换大小写以决定下一步。
  • 我看过这个教程。 cwiki.apache.org/confluence/display/OOZIE/Java+Cookbook 它只是执行 java 程序。但是如何提取一个值,然后将其与某物进行比较?

标签: mysql oozie


【解决方案1】:

您可以从 shell 脚本捕获输出并将其传递给 java 操作。在 shell 脚本中,回显类似 'dateVariable=${DATE}' 的属性,并在 shell 操作中添加捕获输出元素。这将让您从 shell 脚本中捕获 dateVariable。在 java 操作中,您可以将捕获的变量作为参数传递为 ${wf:actionData('shellAction')['dateVariable']} 其中 shellAction 是 shell 操作名称。

示例工作流程:-

<workflow-app xmlns="uri:oozie:workflow:0.4"
name="Test workflow">
<start to="shellAction" />
<action name="shellAction">
    <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <exec>test_script.sh</exec> <file>${nameNode}/${workFlowLocation}/Scripts/test_script.sh#test_script.sh</file>          
        <capture-output />
    </shell>
    <ok to="JavaAction" />
    <error to="fail" />
</action>

<action name="JavaAction">
    <java>
        <main-class>com.test.TestDriver</main-class>
        <arg>${wf:actionData('shellAction')['dateVariable']}</arg>
        <capture-output />
    </java>
    <ok to="end" />
    <error to="fail" />
</action>

<kill name="fail">
    <message>Job failed, error
        message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />

在shell脚本中,回显如下值

echo "dateVariable=${dateValue}"

参考:stack similar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多