Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6664426
  • 博文数量: 1005
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13071
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1005)

文章存档

2020年(2)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: 大数据

2014-02-28 10:08:17


完成了kettle job之后,需要对job进行进行调度部署,下面列举了如下例子.

linux
./kitchen.sh -rep dev_my_etl -user admin -pass admin -dir /mssql_to_oracel -job jb_sqlserver_to_oracle_for_tb_test -level=basic -param:pi_statedate=20140228 >/home/etl/kettle.log

-rep  :需要知道资源库名称,我这里的job是存放在资源库的,也即存放在数据库
-user :连接资源库的用户
-pass :连接资源库的密码
-dir   : 该job存放的路径
-level :日志记录的级别
-param:job中定义的参数,调度的时候需要给参数赋予值.

我们可以采用linux下的定时任务调度job,我们需要事先编写一个shell程序,如下:
#!/bin/bash
l_last_date=`date +%Y%m%d --date="1 day ago"`

##go to kettle soft dir
cd /opt/pdi-ce-4.4.0-stable/data-integration
./kitchen.sh -rep dev_my_etl -user admin -pass admin -dir /mssql_to_oracel -job jb_sqlserver_to_oracle_for_tb_test -level=basic -param:pi_statedate=${l_last_date} >/home/etl/log/kettle_${l_last_date}.log

通过crontab调度上面的脚本
[etl@node1 shell]$ crontab -l
00 10 * * * /home/etl/shell/sql_to_oracle.sh>>$HOME/output.log 2>&1

这里是定义每天上午10点整启动调度的脚本.


附加一个稍微完成的例子,该例子是要事先判断该job是否已经跑过(跑过的话会写入日志表tb_kettle_finish_info),跑过的话就不跑。
[etl@node1 shell]$ more sql_to_oracle.sh
#!/bin/bash
l_last_date=`date +%Y%m%d --date="1 day ago"`
sqlplus /nolog<
    whenever sqlerror exit 20;
    whenever oserror exit 20;
    connect hxl/hxl;
    variable cnt number;
    begin
    select Count(1) into :cnt from tb_kettle_finish_info t where t.statedate=${l_last_date} ;
    if :cnt = 0 then
     :cnt:=0;
    else
     :cnt:=99;
    end if;
    end;
/
exit :cnt
ENDOFINPUT
flag=$?
echo $flag

if [ ${flag} = 0 ]; then
##go to kettle soft dir
cd /opt/pdi-ce-4.4.0-stable/data-integration
./kitchen.sh -rep dev_my_etl -user admin -pass admin -dir /mssql_to_oracel -job jb_sqlserver_to_oracle_for_tb_test -level=basic -par
am:pi_statedate=${l_last_date} >/home/etl/log/kettle_${l_last_date}.log
fi

如上例子的另外一种写法
[etl@node1 shell]$ more sql_to_oracle01.sh
#!/bin/bash
l_last_date=`date +%Y%m%d --date="1 day ago"`
sqlplus /nolog<
    whenever sqlerror exit 20;
    whenever oserror exit 20;
    connect hxl/hxl;
    col coun new_value v_coun;
    select Count(1) coun from tb_kettle_finish_info t where t.statedate=${l_last_date} ;
    exit v_coun
/
ENDOFINPUT
flag="$?"

if [ ${flag} = 0 ]; then
##go to kettle soft dir
cd /opt/pdi-ce-4.4.0-stable/data-integration
./kitchen.sh -rep dev_my_etl -user admin -pass admin -dir /mssql_to_oracel -job jb_sqlserver_to_oracle_for_tb_test -level=basic -par
am:pi_statedate=${l_last_date} >/home/etl/log/kettle_${l_last_date}.log
fi

-- The End --

阅读(13615) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~