kettle 的命令调用

 
kettle 的 kitchen.bat 后面参数说明:
 

Kettle是一个开源的ETLExtract-Transform-Load的缩写,即数据抽取、转换、装载的过程)项目,项目名很有意思,水壶。按项目负责人Matt的说法:把各种数据放到一个壶里,然后呢,以一种你希望的格式流出。Kettle包括三大块:

   Spoon——转换/工作(transform/job)设计工具 (GUI方式)

   Kitchen——工作(job)执行器 (命令行方式)
   Span——
转换(trasform)执行器 (命令行方式)

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高

效稳定。Kettle中有两种脚本文件,transformationjobtransformation完成针对数据的基础转换,job则完成整个工作流的控制。

 

因为最近工作需要所以不得不研究下调用kitchen.bat后面接参数的问题。

经过一段时间的研究终于知道传参的方法了。

如下:

kitchen.bat   后面可以是-也可以是/然后再加options

Options:
/rep        : Repository name
/user       : Repository username
/pass       : Repository password
/job        : The name of the job to launch
/dir        : The directory (dont forget the leading /)
/file       : The filename (Job XML) to launch
/level      : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing)
/logfile    : The logging file to write to
/listdir    : List the directories in the repository
/listjobs   : List the jobs in the specified directory
/listrep    : List the available repositories
/norep      : Do not log into the repository
/version    : show the version, revision and build date
/param      : Set a named parameter =. For example -param:FOO=bar
/listparam : List information concerning the defined parameters in the specified job.
/export     : Exports all linked resources of the specified job. The argument is the name of a ZIP
file.

而options 后面可以是=也可以是:也可以是空格

kitchen.bat /file d:\   或者 -file=D:\ 或者/file:D:\等等都可以。。。

定时执行的代码参考如下【原创】,可以执行的实例

1、windows下的执行方式:

建立一个mysql.dat的文件,里面写入

cd D:/Kettle-3.0.2
kitchen.bat /norep -file=D:/kettledata/mysal2orcle.kjb >> kitchen_%date:~0,10%.log
exit

保存文件。

解释一下上面的语句

cd D:/Kettle-3.0.2 这句的含义是跳转到kettle的根目录,因为kitchen.bat 文件在根目录下

kitchen.bat /norep -file=D:/kettledata/mysal2orcle.kjb >> kitchen_%date:~0,10%.log

上面的含义是,使用kitchen.bat 命令来执行job文件,job文件的存放路径是D:/kettledata/mysal2orcle.kjb,并且将执行的结果输出到 kitchen_%date:~0,10%.log文件中。

2、linux下的书写格式:

创建mysqldb.sh

内容如下

cd /home/Kettle-3.0.2 这句的含义是跳转到kettle的根目录,因为kitchen.bat 文件在根目录下
./kitchen.sh -file=/home/etl/mysql.kjb >> /home/etl/log/kettle.log

然后这个文件在crontab中去执行

注意:linux执行shell过程中,由于linux对权限要求很严格,所以kitchen.sh必须有可执行的权限。前面必须加上./,也就是./kitchen.sh才能执行,否则会提示找不到此命令。

kitchen.bat的使用方法:

 

Kitchen.bat /file:D:\job_name.kjb /level:Basic>>D:\etl.log

 

使用心得:

 

1.file和level都是前面有‘/’,后面有‘:’,任何一个都不能丢。

 

2.此语句要在一行上完成,中间不能有换行符之类的。

博主从昨天就开始调试的几个bat文件,始终不能在我指定的文件里面记日志,一直在dos界面记录,苦思不得其果,偶然的一个把bat文件全屏之后,发现原来语句被换行了,修改到同一行之后可以顺利的运行。

 

3.此语句后面不能接任何语句,就算你在bat文件里面添加了别的语句,也不会得到执行,查阅了好多资料,没有发现解决办法,逼不得已,我只能把job做成了一个一个单独的bat文件,这个有点儿杯具。

 

4.JDK或者JRE很重要。

博主因为服务器上没有配置java环境,吃了不少苦。

先是没装java环境,无法运行kettle;接着装好了java环境之后,job和转换可以正常运行,但是kitchen.bat语句不能正常运行,又查阅了一堆资料后发现,原来是环境变量的问题,设置了环境变量之后总算可以正常运行了。

 
例子:

set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"

D:
cd D:\DEV\KETTLE
echo EXECUTE_TIME:%Ymd%>D:\DEV\KETTLE\zijinjob\log.txt
call Kitchen.bat /norep /file=d:\dev\kettle\zijinjob\emp_capital_ri.kjb  >> D:\DEV\KETTLE\zijinjob\log.txt

 
注意!在调用过程中可能会出现下列的错误,需要检查路径中是否有中文:
“ERROR: kitchen  can't  continue  because the job couldn't  be  loaded ”
 
 
如果机器的时间格式是下面的格式:
wed 12/04/2013 16:42:49
那么修改那个截取日期和时间的语句即可
如:想到的20131204164249
那么这样set "Ymd=%date:~10,4%%date:~4,2%%date:~7,2%%time:~2%%time:~3,2%%time:~6,2%


例子:从一个文件夹中拷贝一个文件到另一个文件夹中,并每次添加上一个时间后缀;
kettle 的命令调用_第1张图片


今天 突然发现个问题,如果按照上面所做,在上午执行时,time 里的小时就会出现空格;比如 2013年12月7日 9时12分25秒,那么Ymd的值为20131207 91225 ,在天和小时之间有一个空格,这个时候在创建备份表时就创建不成功,因为空格不能作为文件的一部分;所以需要按照下图来处理一下,这样,不论是上午还是下午都没问题;
kettle 的命令调用_第2张图片
这里添加两行的代码的意思是:把等号之前的字符用等号后的字符代替,如下例子,可以使一个字符也可以是一个连续的字符)
set m=12 345 67
set ss=%m:1=0%   使m中的1用0替换
set ss=%m:12 3=0%  使m中的12 3用0替换
set ss=%m: =0%  使m中的空格用0替换

你可能感兴趣的:(ETL,工具)