背景
软件环境:windows、kettle 9.0版本。
需求:使用指令的方式执行kellte转换任务,并且需要传入命名参数。
设置命名参数
首先使用ctrl+t打开转换属性,并填入你需要传入的参数,如下图:
可以在转换中以${value}的方式使用这些参数,表输入记得勾选允许替换SQL变量,如下图:
大部分输入框都能使用命名参数,如下图:
命令行运行kettle任务
先将kettle转换保存到相应的路径。然后打开cmd输入如下指令,注意点:
1、如果任务转换使用pan.bat 执行,如果使作业使用Kitchen.bat执行。
2、windows下参数有格式要求,需要使用(“/”) 和(“:”)。
3、该版本传入命名传参需要添加双引号,否则会报无法识别的命令行选项。
官方建议如下:
Note:Windows systems use syntax with the forward slash (“/”) and colon (“:”). If spaces are present in the option values, use single quotes (“) and double quotes (“”) to keep spaces together, for example, “-param:MASTER_HOST=192.168.1.3” “-param:MASTER_PORT=8181” |
执行语句如下:
bat脚本下
F:\soft\pdi-ce-9.0.0.0-423_222\data-integration\pan.bat /file:C:\Users\Administrator\Desktop\project\oracle2es\dev\ktr\getDataInfo.ktr “/param:database=CTXSYS” |
power脚本下
F:\soft\pdi-ce-9.0.0.0-423_222\data-integration\pan.bat /file:C:\Users\Administrator\Desktop\project\oracle2es\dev\ktr\getDataInfo.ktr `”/param:database=CTXSYS`” |
遇到问题
2021/05/08 14:42:55 – Pan – ERROR (version 9.0.0.0-423, build 9.0.0.0-423 from 2020-01-31 04.53.04 by buildguy) : 无法识别的命令行选项 |
该问题使因为不识别param参数,导致无法传入命名参数。原指令使用powershell执行,语句如下:
${kettlePath}\pan.bat -file ${kettleFilePath}\getDataInfo.ktr -param:database=’$database’ -param:filename=’$filename’ |
由于该kettle9.0版本过新,且是windows中文版本,网上的参考资料较少,一时没解决该问题。后面使用google搜索到官网文档,模仿官方案例重写语句,才能正常运行。解决方式如下:
1、参数由【-x:y】【-x y】格式转换为【/x:y】格式。
2、param变量使用双引号包裹起来,这部分网上很少有人提到,可能是新版本的需求。
3、无法在powershell中运行,要使用cmd运行,未知原因。后面找到原因,在powershell中需要使用【`”】对双引号进行转义。