我需要参数化我的水壶作业中的所有变量和转换(作业将在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]
使用步骤Get variable
,您可以在Table input
步骤之前将参数更改为变量(列),而不必忘记指定Insert data from step
。
由于问题来自类型格式错误,您可能希望通过Write to log
步骤查看PDI对该变量的看法。
告诉我数字格式异常是否仍然存在。
当pentaho期望端口号中的整数但接收s字符串时,这是典型的错误。检查shell脚本中端口号后面是否有空格
我一直试图让这些东西运转起来。如果在作业规范中指定参数,然后将它们显式传递给需要它们的任何转换,则-param(或/ param)命令行标志似乎只能起作用。
要获得的系统属性在我使用的作业中是普遍可访问的:
set "OPT=-Dname1=value -Dname2=value"
在叫厨房之前。这会将-D标志放入java选项中。希望这将适用于数据库规范。
当然你可以将它们放在kettle.properties中,但是如果你想在不同的环境中运行会变得混乱。