参考内容
表输出详解
学习思路
常见问题:
参考文章
删除了该文中的对日期后的数据的删除,因为后面同步对比的时候,会补全该时间段的操作。
设置增量时间区间,对该时间内的数据做增量(包含该区域的deleted,inserted,updated做同步)
1.设置全局变量,一个当天日期,一个时间间隔;
2.获取源表,目标表该时间段的数据,source_t ,target_t;
3.对比source_t ,target_t的数据 对比结果如下图;
4.对不同结果产生不同分支的操作
kettle 中kitchen和pan的使用
kettle中有四个主要的部件分别是作业、转换、步骤、跳。其中作业和转换能够相互调用执行。每一个转换中的一个执行单元叫做步骤,连接步骤之间的线叫做跳。
在linux中我们通常使用kitchen和pan执行作业和转换。kitchen用来执行作业,pan用来执行转换。具体语法如下:
./kitchen.sh /file:/data/jobname.kjb /level:Detailed >>/data/log.log
./pan.sh /file:/data/transformation.ktr /level:Detailed >> /data/t_log.log
1.spoon调度:
如图配置好,执行,到点自动执行
到点自动执行
2. 计划任务调度
d:
cd D:\Kettle\pdi-ce-8.2.0.0-342\data-integration
kitchen.bat /norep -file=C:\Users\Lenovo\Desktop\Kettle_test\cmd\test.kjb >>C:\Users\Lenovo\Desktop\Kettle_test\cmd\test.log
exit
注意
在spoon里面执行不报错,在kitchen里面调度没出错但是没数据。
我的理解是下面的流程依赖上面的变量,两段应该都会执行,但是下面执行的时候没有获取到上面的变量数据。应该将其放在一条流程线上,这样更严谨
l
#######################linux 配置 kettle
这个过程也出了许多错,也是因为没有java基础吧,报错了也一时半会不好解决;好在自己都解决了。
###第一部分 配置java环境
#1.1 完全卸载已有java环境 并安装1.8java
sudo apt install openjdk-8-jdk
#完全卸载java
apt-get update
apt-cache search java | awk '{print($1)}' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e 'java-common' | xargs sudo apt-get -y remove
apt-get -y autoremove
#清除配置信息:
dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge
#清除java配置及缓存:
bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf
#手动清除JVMs:
rm -rf /usr/lib/jvm/*
#安装java
sudo apt install openjdk-8-jdk
##1.2找到java安装目录 并配置java环境
#whereis java
#ls -l file #看看是不是软连接
#/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
##1.3 配置java环境
#配置文件
vim /etc/profile
#whereis java
#ls -l file #看看是不是软连接
#/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre #为jdk的安装目录
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
###第二步 开发kjb kjr文件 for linux
#思路:用到路径变量解决linux 和 windows path不一样的情况,先在windows上开发,然后load到linux对应文件夹 执行
###第三步 执行
手动执行
#cd 到kitche目录
chmod +x *.sh
#手动执行
../data-integration/kitchen.sh -norep -file=./linux_test.kjb
#sh脚本执行;切记文件必须为ansic 编码;基础不牢 错误不断 哎!
#/usr/bin/bash
exe_time=`date +'%Y-%m-%d%H%M%S'`
cd /usr/local/kettle/jb_tr
../data-integration/kitchen.sh -norep -file=./linux_test.kjb -log=../kettle_log/${exe_time}kettle.log
crontab -e
*/3 * * * * /bin/sh /usr/local/kettle/jb_tr/exe_linux_test.sh
完美!因为没有java的基础 ,linux 也不熟悉,犯了很多错误,最终都解决了。
没问题才怪! 头发都少了几根
上面这个sh脚本不能执行,这个crontab 尼玛坑了;
注意事项:我用的Ubuntu 16
① crontab的环境变量与shell里面的环境变量 独立(vi /var/log/cron.log)坑的一比;
vi /var/log/cron.log #查看cron 运行日志,只能看到一个记录
vim /etc/crontab #设置好环境变
②crontab source , cd 无法使用(这些命令是shell的,不是系统的不信你where is)
③回车都会报错,fuck !
如果看不到cron日志请点这里
wan.sh
crontab -e
这次真的完成了!最后这个linux调度我搞了一天!!!
果然还是我java 和 linux太菜了、
设置连接编码:characterEncoding utf8
只有job可以发邮件。transfer不可以发邮件,并且配置smtp时密码是授权码 不是账户密码