Kettle - Kitchen
🏷️ Kettle
最近在做 Kettle 的项目,所以整理了一下 Kitchen 命令相关的文档。
Kitchen 是用来运行通过 Spoon 创建的 作业(Job)的。
本文主要参考自官方的 Kitchen User Documentation。
安装
Windows 平台后解压就可以了。
Unix 平台需要运行如下命令使脚本可执行。
cd Kettle
chmod +x *.sh
运行 Kitchen
Windows 平台使用 Kitchen.bat,Unix 平台和 Mac OSX 使用 kitchen.sh 运行 Kitchen。
运行需要 Java Runtime Environment 1.5 或更高的版本。
命令行参数
参数格式如下:
/option:value
windows 下还可以通过 -option=value
、/option value
的形式设置命令行参数。
Kitchen.bat -norep -file=%rep_dir%\%job_name% -level=Detailed -version
Kitchen.bat /norep /file:%rep_dir%\%job_name% /level:Detailed /version
Kitchen.bat /norep /file %rep_dir%\%job_name% /level Detailed /version
Kitchen.bat /norep /file "%rep_dir%\%job_name%" /level Detailed /version
如果参数中带有空格,需要使用单引号或双引号将它们包起来。
1. -version 显示版本信息
添加 -version
参数会在窗口输出如下信息:
2020/01/14 15:50:18 - Kitchen - Kettle version 7.1.0.0-12, build 1, build date : 2017-05-16 17.18.02
2. -listparam 列出命名参数信息
使用 -listparam
参数可以列出指定 Job 中设置的命名参数信息(包括 参数名、默认值和描述)。
如果指定了 -listparam
参数,则 Job 不会被执行。
listparam 的结果格式如下:
Parameter: ETLKey1=, default=DefaultKey1 : ETL主键1
Parameter: ETLKey2=, default=DefaultKey2 : ETL主键2
3. -file 指定 Job 文件
指定要执行的 Job 文件(.kjb)。
-file=filename
4. -param 指定命名参数
可以通过 -param
参数指定 命名参数 。
-param:key=value
如果是在 Windows 环境,应使用如下格式。
-param:"key=value"
5. -logfile 指定日志文件
默认情况下是标准输出,Windows 下就是输出到控制台。
-logfile=Logging Filename
6. -level 指定日志级别
-level=Logging Level
- Error: 错误日志
- Nothing: 没有日志
- Minimal: 最小日志
- Basic: 基本日志(默认的日志级别)
- Detailed: 详细日志
- Debug: 调试(比较详细)
- Rowlevel: 行级日志(非常详细,会产生大量数据)
7. -rep 指定仓库
-rep=Repository name
指定仓库名时,会先读取本地的仓库配置文件(C:\Users\liujiajia.kettle\repositories.xml)。
如需登录则需要通过 -user
和 -pass
参数指定账户和密码,另外还需要通过 -dir
和 -job
指定需要运行的 Job(Job 名不需要带 .kjb 文件后缀)。
还可以通过环境变量 KETTLE_REPOSITORY 指定这个参数。
8. -user 指定仓库的用户名
-user=Username
还可以通过环境变量 KETTLE_USER 指定这个参数。
9. -pass 指定仓库的密码
-pass=Password
还可以通过环境变量 KETTLE_PASSWORD 指定这个参数。
10. -job 指定运行的 Job
参数中的 Job 名不需要带 .kjb 文件后缀。
-job=Job Name
11. -listdir 列出仓库中的目录
列出 -dir
参数指定的目录下的子目录名。
-listdir=Y
也可以省略后面的 =Y 。
-listdir
12. -dir 指定仓库目录
-dir=directory
/
:根目录/production/Dimensions
:子目录
默认值为根目录(/
)。
13. -listjobs 列出仓库目录下的 Job
列出参数 -dir 指定的仓库目录下的 Job。
-listjobs=Y
这个参数同样也可以省略后面的 =Y 。
14. -listrep 列出有效仓库
-listrep=Y
这个参数同样也可以省略后面的 =Y 。
输出结果格式如下:
2020/01/17 15:11:34 - Kitchen - Start of run.
2020/01/17 15:11:34 - RepositoriesMeta - Reading repositories XML file: C:\Users\liujiajia\.kettle\repositories.xml
List of repositories:
#1 : Test-Development [Database repository] id=KettleDatabaseRepository
#2 : Report [Database repository] id=KettleDatabaseRepository
#3 : OCT_B2B_Kettle [File repository] id=KettleFileRepository
15. -norep 不登录仓库
使用不登录到仓库的方式执行 Job,需要通过 -file
参数来指定需要运行的 Job 文件。
-norep=Y
这个参数同样也可以省略后面的 =Y 。
如果已经设置了 KETTLE_REPOSITORY, KETTLE_USER, KETTLE_PASSWORD 环境变量,通过 -norep
参数可以防止登录到仓库。
示例
1. 从文件运行 Job
Windows 环境
kitchen.bat /file:D:\Jobs\updateWarehouse.kjb /level:Basic
Kitchen.bat -rep OCT_B2B_Kettle -job "/BT/Jobs/Comm/Job_SetPreUpdateDateVariable"
Linux 环境
kitchen.sh -file=/PRD/updateWarehouse.kjb -level=Minimal
2. 从仓库运行 Job
Windows 环境
kitchen.bat /rep:"Production Repository" /job:"Update dimensions" /dir:/Dimensions /user:matt /pass:somepassword123 /level:Basic
3. 输出日志
Windows 环境
kitchen.bat /file:C:\PRD\runAll.kjb /level:Basic >> C:\LOG\trans.log
Linux 环境
kitchen.sh -file="/PRD/updateWarehouse.kjb" --level=Minimal >> /LOG/trans.log
>>
每次将日志输出到文件末尾>
每次覆盖文件
返回值
Kitchen 返回了一个错误 Code 用来说明发生了什么异常。
- 0 : The job ran without a problem.
- 1 : Errors occurred during processing
- 2 : An unexpected error occurred during loading / running of the job
- 7 : The job couldn't be loaded from XML or the Repository
- 8 : Error loading steps or plugins (error in loading one of the plugins mostly)
- 9 : Command line usage printing
定时执行
Windows 环境可以使用系统自带的 任务计划程序,Linux 下可以使用 crontab 命令。
附
1. 使用 File Repository 时的批处理文件
项目目录结构如下,批处理文件在 bat 目录下。
--bat
|--exec_job.bat
--repository
|--job_name.kjb
脚本运行父目录平级的 repository 目录下的 Kettle 作业。
set pdi_dir=C:\pdi-ce-7.1.0.0-12\data-integration
set cur_dir=%cd%
cd..
set root_dir=%cd%
cd %cur_dir%
set rep_dir=%root_dir%\repository
set job_name=%1
%pdi_dir%\Kitchen.bat -norep -file=%rep_dir%\%job_name% -level=Detailed
2. KettleFileException
有时运行时会报 KettleFileException 异常,可以将将当前目录定位到 Kitchen.bat 所在的目录(如 C:\pdi-ce-7.1.0.0-12\data-integration)后再尝试运行。
不过仍然有可能出现类似异常,不知道为啥。
org.pentaho.di.core.exception.KettleFileException:
Unable to list jar files in plugin folder 'C:\Users\liujiajia\.kettle\plugins'
Unable to get VFS File object for filename 'C:\Users\liujiajia\.kettle\plugins' : Could not find file with URI "C:\Users\liujiajia\.kettle\plugins" because it is a relative path, and no base URI was provided.