我们这个ETL的制作往往是为了我们数据的转移,但是有时候我们要的不仅仅是数据转移,很多地方我们需要的数据同步,比如每五分钟同步用户数据之类的,这种在多系统协作的一个公司应用中还是经常出现的。
所以我们就要想一个办法,让他能够没多少时间进行自动的执行,使得我们不至于每五分钟去手动执行一次。
接下来的内容,首先我们要解决两个问题一,在没有人的条件下怎么自动执行ETL,二,我们怎么控制定时执行。
这个时候操作系统给我们提供了一个非常完善的方式,通过脚本执行ETL(windows系统下为.bat,linux下为.sh),两个操作系统都给我们提供了比较完善的定时任务的设置方式,在windows下面图形化界面下,想必大家都是非常熟悉控制面板这个东西了吧,我们在windows的控制面板下面有个选项就是定时计划,我们可以在那里进行设置,在linux下面的crontab进行设置。具体的例子下面会给出来,但是例子仅以windows为例(抱歉对于.sh的掌握还不行)。
接下来我们要将我们的转换放到我们可以通过脚本进行执行的方式,然后我们就需要创建一个kettle的一个其他的新建类型Job
我们新建一个Job之后我们会发现我们的左边的控件框也是不同的,我们需要的创建一个JOB的从开始到结束的过程,所以我们先建立一个开始节点以及一个结束的节点,具体的方法和之前的转换新建控件的方法并没有什么不同,通过拖动控件就可以将控件新建到我们的JOB上面去了
然后我们这个JOB之中需要执行的内容是什么,是我们的测试变化,所以我们就是要在其中添加一个新的转换,当然我们要通过SHIFT加鼠标规定其执行的顺序,在这里显而易见我们从开始出发进行具体的任务执行,到了最后我们到达成功节点(完成)。
接下来我们要设置我们这个转换,使得它和我们之前的测试转化相互关联,我们双击打开我们的转化
一般来说简单的JOB不需要设置太多的选项,只要在这个Transformation filename里面进行关联就可以了,我们设置好的路径如下,在这里我们的kjb(job文件)和我们的ktr(转换文件)放到同一个文件夹下面.
然后我们可以在job的页面测试能不能正确的调用到我们的ktr我们尝试运行一下我们的job,下面会依次显示我们的任务的执行顺序以及每一个的执行情况,在这里我们成功的执行了这个转换
接下来我们要通过脚本来调用到这个,这个时候我就没法进行详细的解释了,总之通过这样的.bat脚本设置我们才能通过脚本调用到我们的kjb然后实现定时的任务(下划线部分是我们需要设置的在每个环境不同的特异性参数).
@echo off
echo RUN...
REM ****** 根据具体情况修改JAVA_HOME路径和ETL_PATH路径
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
set PATH=%JAVA_HOME%.;%PATH%
set ETL_PATH=C:\ETL\Kettle3.2
set job_path=C:\ETL\JOBS\
set CLASSPATH=%JAVA_HOME%\lib\*.jar
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\lib\kettle-core.jar
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\lib\kettle-db.jar
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\lib\kettle-engine.jar
FOR %%F IN (%ETL_PATH%\libext\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\JDBC\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\webservices\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\commons\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\web\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\pentaho\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\spring\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\mondrian\*.jar) DO call :addcp %%F
FOR %%F IN (%ETL_PATH%\libext\salesforce\*.jar) DO call :addcp %%F
goto extlibe
:addcp
set CLASSPATH=%CLASSPATH%;%1
goto :eof
:extlibe
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\libswt\runtime.jar
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\libswt\jface.jar
set CLASSPATH=%CLASSPATH%;%ETL_PATH%\libswt\win32\swt.jar
java -Xms512m -Xmx1024m org.pentaho.di.kitchen.Kitchen -norep -level Basic -file=%job_path%myJob.kjb >> C:\ETL\JOBS\logs\myJob_%date:~0,4%%date:~5,2%%date:~8,2%.log
以上就是脚本的内容,下划线部分为系统相关变量以及系统内相关JDK等的安装路径,加粗部分为本个任务的相关文件名以及文件的存放路径
最后是我们的定时的设置,在windows上面这个出奇的方便,具体的怎么设置我们可以参考百度经验win7怎么设置定时执行任务,将我们的这个.bat文件设置成为定时任务即可,大概的位置在附件->系统工具->任务计划程序中进行操作