【问题标题】:Can not override Talend job context parameters when launching from the command-line从命令行启动时无法覆盖 Talend 作业上下文参数
【发布时间】:2014-01-07 16:43:22
【问题描述】:

我目前正在尝试从命令行运行 Talend 作业。由于我的生产环境参数与我在本地工作站上的不同,我必须在目标服务器上启动作业时提供上下文参数

kaffein@coffeeshop:~$ ./job_run.sh --context_param port=1234 --context_param server=myserver

当我导出作业时,Talend Open Studio(用于数据集成)为我的所有子作业文件夹生成 Default.properties 文件。这些文件包含我的本地默认上下文参数

使用生产参数(如上所示)启动我的作业然后失败,因为提供的命令行参数(--context_param 参数)似乎无法覆盖“本地”参数。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您是否使用 tRunJob 组件调用子作业?如果是,请确保选中复选框以将整个上下文变量传播到子作业。否则,将使用默认的子作业上下文
  • @JulienBoulay 谢谢,但我已经在构建工作时选中了此复选框。我认为它也会将上下文传播到子作业。但它并没有那样工作。到目前为止,我所做的是将参数硬编码在 Default.properties 文件中。显然不是最好的方法,因为它涉及大量的样板复制/粘贴。

标签: parameters etl talend data-integration


【解决方案1】:

Project Settings 中的Job Settings 下使用Implicit context load 可能更容易。

在这里,您可以定义环境参数(例如连接设置)的文件(例如 CSV),只要它们共享相同的文件路径,您就可以将不同的上下文变量放在不同环境的文件中,并拥有Talend 将它们作为工作的一部分加载。

现在,当您运行作业时,它应该使用环境特定的上下文变量,因为它们是从文件中加载的。

【讨论】:

  • 这样使用起来要容易得多。
  • 澄清一下,格式是key,value,其中逗号, 是选择的分隔符。尝试在第一次正确处理,因为它上面会发生一些强大的缓存,如果你稍后更改它,很难让它传播。
【解决方案2】:

如果你有一组上下文,例如 DEV、UAT、PROD 等,你可以在你的 shell 脚本中设置这个参数 - 所以如果你想要 PROD,你可以把这个参数添加到你的 shell 中

--context=PROD

这将从您的 PROD 上下文属性文件中加载您的 PROD 参数,在每次构建时,我们都修改了所有 shell 脚本,以添加检查以确定它所在的环境,然后在正确的上下文中传递。

【讨论】:

    【解决方案3】:

    我也遇到了类似的问题,也勾选了传播的复选框,但后来发现了这个

    将参数传递给子作业

    在结构化应用程序中,一个 Job 可以调用另一个 Job,它是 需要将参数传输到子作业。在 Talend 开放工作室 这个任务很简单。当您创建子作业(即调用 另一个工作)只需单击其组件选项卡并确保传输 检查整个上下文。

    注意组件标签存在于父JOB中。

    我在这里找到了解决方案http://www.robertomarchetto.com/how_to_parameter_values_talend_job_command_line

    为我工作。

    罗伯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多