通过脚本将环境变量传递给Pentaho水壶转换

时间:2018-09-03 07:30:09

标签: pentaho kettle pentaho-spoon pentaho-data-integration

我需要在我的水壶作业和转换中参数化所有变量(这些作业将在AWS中运行,并且所有参数都作为环境变量传递)。

我在作业及其伴随的转换中的连接,路径和各种其他参数使用$ {SOURCE_DB_PASSWORD},$ {OUTPUT_DIRECTORY}样式。

当我在Data Integration UI中将它们设置为环境变量时,它们全部起作用,并且 job在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]

5 个答案:

答案 0 :(得分:1)

问题可能不是由参数引起的,而是由表输入引起的。您可以检查protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // other logic here if (G1List.Count != 0) { DOC_TYPE = G1_DOC_TYPE; } else if (G2List.Count != 0) { DOC_TYPE = G2_DOC_TYPE; } else if (G3List.Count != 0) { DOC_TYPE = G3_DOC_TYPE; } else { Response.Redirect("/SitePages/AccessDeny.aspx"); } Page.DataBind(); } } 是否被选中。

enter image description here

答案 1 :(得分:1)

在命令行中使用-param:SOURCE_DB_HOST=value语法以及在作业和转换中使用${SOURCE_DB_HOST}语法是正确的方法。

您需要在转换中进行的操作(但不是针对出现的作业)是显式添加参数到转换属性(control-T或转换工作空间中的mac command-T) )。屏幕截图已附上。

然后直接从Shell脚本运行作业或进行转换。

enter image description here

答案 2 :(得分:0)

通过步骤Get variable,您可以在Table input步骤之前将参数更改为变量(列),而不必忘记指定Insert data from step

由于问题来自类型格式错误,因此您可能希望通过Write to log步骤查看PDI对变量的看法。

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

答案 3 :(得分:0)

当pentaho期望端口号为整数但接收到s字符串时,这是一个典型错误。检查shell脚本中端口号后是否有空格

答案 4 :(得分:0)

我一直在努力使这些东西起作用。 -param(或/ param)命令行标志仅在您在作业规范中指定参数,然后将其显式传递给需要它们的任何转换时才起作用。

要获得可以在我使用的工作中普遍访问的系统属性:

set "OPT=-Dname1=value -Dname2=value"

打电话给厨房之前。这会将-D标志放入java选项。希望这将适用于数据库规范。

当然,您可以将它们放在kettle.properties中,但如果要在混乱的不同环境中运行,则