定时运行Kettle任务

下面是用文件方式保存Job和转换时,在Linux运行一个Job的示例:

代码:
./kitchen.sh -norep -file “/root/Desktop/kettle_demo/demo_job.kjb”

注意:Linux环境中,当使用了自定义插件时,必须在Kettle所在目录下运行以上命令,否则会提示找不到自定义的插件。

当使用文件方式(norep)保存Job和Transformation定义时,Job中的Transformation路径要用下面所示的格式,否则会Job会找不到Transformation

代码:
${Internal.Job.Filename.Directory}/demo_transfer.ktr

定时自动执行:
编写一个shell文件:test.sh

代码:
CUR_PATH=$(cd “$(dirname “$0″)”; pwd)
PDI_HOME=/root/pdi-ce-4.1.0-stable/data-integration/
export JAVA_HOME=/usr/java/jdk1.6.0_21/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
cd $PDI_HOME
./kitchen.sh -file=”$CUR_PATH/ascm_data.kjb” >> “$CUR_PATH/kettle.log”

run_ascm_job.sh
然后赋予该shell的执行权限:

代码:
chmod +x ./*.sh

添加自动执行命令:
登录Linux终端,运行crontab -e编辑Linux的定时任务文件:
添加如下一行:

代码:
25 * * * * /root/Desktop/kettle_demo/test.sh

表示在每个小时的第25分钟运行该命令
该定时任务的格式是:<分钟> <小时> <日> <月> <星期> <要执行的命令>
不限的条件就用*表示

运行 service crond restart重启crond服务,接下来等到定时的时间,看一下是否执行了。

如果运气好的话,就应该一切如愿了。

 

简单方法搞定日期格式转换的问题

    程序中经常会用到日期和字符串之间的转换,由于计算机的区域设置(日期格式设置)的不同,会导致在A计算机上运行正确的程序在B计算机上就出问题。如何搞定这些问题?
    字符串–>日期的转换:StrToDate函数,这个函数有两个实现,分别是:
      StrToDate(const S: string): TDateTime
      StrToDate(const S: string;const FormatSettings: TFormatSettings): TDateTime;
      如果我们的字符串格式是固定的话,如yyyy-MM-dd,用第一个的话,会很容易在不同日期格式设置的计算机上出问题。所以要用第二个,但是FormatSettings这个参数怎么设置呢?
      var
        FormatSettings:TFormatSettings;
      ————————————————-
      FormatSettings.ShortDateFormat := ‘yyyy-MM-dd’;   // 这里设置成和字符串中的日期格式一致的格式
      FormatSettings.DateSeparator := ‘-‘;
      FormatSettings.LongDateFormat := ‘yyyy-MM-dd’;    // 这里设置成和字符串中的日期格式一致的格式
      如何保证由日期转换出来的字符串的格式是固定的呢?用 FormatDateTime(‘yyyy-MM-dd’,date);

    日期–>字符串的转换:
      除了上面提到的可以转换成固定格式的字符串外,有时候其实我们是想转换成计算机的缺省日期格式(事先无法知道目标计算机的日期格式,比如说,我们要拼一个SQL语句,这里面的日期格式最好就是和计算机一致的,否则可能会在数据库里进行自动转换成日期的时候出错,这种情况我们只需要用DateToStr(date)就行了。
      顺便说一句,Access数据库中SQL语句里表示日期的话需要前后都加上#,而不是SQL Server等数据库里前后加单引号(自动由字符串转换为日期)。

修改Delphi源代码并生成可以发布的无BUG BPL

    Delphi虽然是一个相当棒的RAD工具,但是难免也有小的瑕疵。遇到这种情况我们往往会找到Delphi/Source中的源代码进行修改,把这个源代码加入我们的Application,重新编译一下可执行程序就解决了这些小虫子。
    但是如果我们要发布的是应用程序是“Build with runtime packages”(就是说,要连同该应用用到的BPL一起发布才能正常运行应用程序),我们可能需要把诸如VCL70.bpl,RTL70.bpl一起发布。可是这些BPL都是安装Delphi时自带的,如果发布这些BPL的话,其中的BUG也会一起发布,有没有办法打造一个没有BUG的BPL文件呢,就是说如何修改并重新生成系统已有的BPL呢?
    下面我们就演示一下修改VCL70.bpl的方法:New 一个Package,在这个Package中创建一个普通的Form,Compile一下这个Package,会提示加入VCL,当然要同意了。这个时候可以看到在Requires里有一个vcl.dcp,双击它,会自动产生一个vcl.dpk,另存为vcl70.dpk,可能会有其他提示不管它。然后再编译一下(编译有问题的话,用dcc32命令行编译),缺省生成的vcl70.bpl存放在Delphi/Projects/Bpl下。这个就是你修改过Delphi源代码生成的无BUG的BPL,拷出来随便发布吧,如果怕和系统的弄混,可以改一下这个Package的版本号再生成。
    如果要修改的是其他的包呢?很简单,刚才是New了一个Form,因为TForm在VCL中所以会看到Requires里增加了VCL,如果增加的是另一个包里的内容,或者引用了另一个包的单元,自然就会提示你并自动在Requires里加入相应的DCP了,其实最终目的还是要看到这个DCP双击它自动打开一个DPK工程。
    另外,这个方法只能适用于有源代码的包,废话啦,没有源代码怎么修改BUG。
    有的同志会把vcl.dpk命名成其他的名字,这样也没问题,随自己高兴怎么改就怎么改。

I.DO