通过脚本向Pentaho Kettle转换传递环境变量

5
我需要对我的kettle作业和转换中的所有变量进行参数化(这些作业将在AWS上运行,所有参数都以环境变量的形式传递)。我的作业和相关转换中的连接、路径和其他各种参数都使用${SOURCE_DB_PASSWORD}、${OUTPUT_DIRECTORY}等格式。当我在Data Integration UI中将它们设置为环境变量时,它们都能正常工作,作业在UI工具中成功运行。但当我从bash脚本中运行它们时:
#!/bin/sh
export SOURCE_DB_HOST=services.db.dev
export SOURCE_DB_PORT=3306

kitchen.sh -param:SOURCE_DB_PORT=$SOURCE_DB_PORT -param:SOURCE_DB_HOST=$SOURCE_DB_HOST -file MY_JOB.kjb

工作及其所需的转换并未捕获变量。错误信息如下:
Cannot load connection class because of underlying exception: 'java.lang.NumberFormatException: For input string: "${SOURCE_DB_PORT}"'

所以,在不使用jndi文件或kettle.properties的情况下,我需要一种方法来将环境变量映射到PDI作业和转换中的参数/变量。

[Mac OS X 10.13上的PDI版本8.1]


Windows还是Linux? - AlainD
抱歉,问题出现在 Mac OS X 10.13 上,Java 8 版本。 - NullPumpkinException
5个回答

3
使用命令行中的-param:SOURCE_DB_HOST=value语法和作业和转换内部的${SOURCE_DB_HOST}语法是正确的方法。
在转换中,您需要显式地将参数添加到转换属性中(控制-T或在Mac上为命令-T)。附带屏幕截图。
然后可以直接从shell脚本运行作业或转换。 enter image description here

2
我正在努力让这个东西运作起来。-param(或/ param)命令行标志似乎只在您在作业规范中指定参数,然后显式地将它们传递给需要它们的任何转换时才起作用。
为了获得在作业内普遍可访问的系统属性,我使用了以下方法:
set "OPT=-Dname1=value -Dname2=value"

在调用 kitchen 前,请将 -D 标志放入 java 选项中。希望这能与数据库规格配合使用。当然,您可以将它们放在 kettle.properties 中,但如果要针对不同的环境运行,则会变得混乱。"最初的回答"

1
也许问题不是由参数引起的,而是与Table Input有关。您可以检查一下是否选中了“替换脚本中的变量”。

enter image description here


是的,已经检查过了。我的查询是:SELECT * FROM ${SOURCE_TABLE} WHERE updated_at > "2018-05-10 00:0:00" and updated_at < "2018-05-11 00:00:00"。 SOURCE_TABLE 是传递进来的.....我在问题中编辑了环境变量以便更清晰地表达。正如提到的那样,该作业在数据集成IDE工具中成功运行。 - NullPumpkinException

0

这是一个典型的错误,当Pentaho期望在端口号中接收整数而实际接收到字符串时会出现。请检查您的shell脚本中端口号后面是否有任何空格。


0

使用步骤获取变量,您可以在表输入步骤之前将参数更改为变量(列),但不要忘记指定从步骤插入数据

由于问题来自类型格式错误,您可能想查看PDI对变量的看法,使用写入日志步骤。

如果数字格式异常仍然存在,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接