通过脚本将环境变量传递给Pentaho Kettle Transformation

问题描述 投票:2回答:5

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

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

当我在数据集成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]

pentaho kettle pentaho-spoon pentaho-data-integration
5个回答
1
投票

也许问题不是由参数引起的,而是由表输入引起的。你能检查是否检查了Replace variables in script

enter image description here


1
投票

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

您需要在转换中执行的操作(但不适用于它出现的作业)是将参数显式添加到转换属性(control-T或转换工作区中的mac命令-T)。附加屏幕截图。

然后直接从shell脚本运行作业或转换将起作用。

enter image description here


0
投票

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

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

告诉我数字格式异常是否仍然存在。


0
投票

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


0
投票

我一直试图让这些东西运转起来。如果在作业规范中指定参数,然后将它们显式传递给需要它们的任何转换,则-param(或/ param)命令行标志似乎只能起作用。

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

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

在叫厨房之前。这会将-D标志放入java选项中。希望这将适用于数据库规范。

当然你可以将它们放在kettle.properties中,但是如果你想在不同的环境中运行会变得混乱。

© www.soinside.com 2019 - 2024. All rights reserved.