kettle中转换和作业的执行顺序:
1、一个作业内的转换,是顺序执行的。
2、一个转换内的步骤是并行执行的。
3、作业内不支持事务,转换内支持事务。
根据业务需要,通常需要在转换内顺序执行,小技巧如下:
1、执行SQL是优先于所有步骤。
2、使用“阻塞数据直到步骤都完成”,确保其他数据步骤都完成再进行下一步骤。
事务:
1、设置转换只使用一个事务。转换设置-->夹项-->使用唯一连接。
2、设置转换内的表插入等数据库的操作不进行批量提交。"提交记录数量"-->0
excel 输出使用模版踩坑
首先 kettle 有两个excel控件,“Excel输出 ” 和 "Microsoft Excel 输出"
Excel输出 这个控件比较 简单,支持的功能也少,注意,使用模版时,貌似不支持 xlsx ,否则会报错,xls的模版必须是创建时就是xls格式的,不能是 xlsx 后缀修改的
配置如下:
1、不输出头 使用模版中的
2、编码 自行选择,
3、工作表名称,必须和模版中一样,
4、追加excel 模版,
5、模版中有ABCD 4个标签页,如果第一个输出的是C的内容,会直接输出到A上,
"Microsoft Excel 输出" 配置如下,
1、如果文件已存在,这个选项要好好理解,如果多个转换输出到一个excel的多个sheet页签中,选"使用现有文件输出",
2、工作表名要和模版中 你要输出的 sheet的页签的名字保持一致
3、如果输出文件中已存在工作表,因为要使用模版,所以肯定要选择"输出至已存在的工作表中"
4、使用模版创建新文件
5、模版文件路径
6、开始输出自单元格 即模版表头下一行最左测的单元格的位置
7、输出表头,因为使用模版所以 这个不能勾选
8、其他自行摸索
邮件发送多个附件:
1、一共五个附件,三个收件人,其中一个收三个附件,附件是之前的转换生成的,名称加日期,每天一份,比如fuJian-2019-11-19.xls,fuJian-2019-11-18.xls,当天邮件只能发当天的附件,
2、kettle的邮件空间里,选附件是可以选目录的,同时可以加通配符,问题在于 通配符 添加系统变量没有测试成功,日期是变量,输出excel 的目录有其他地区,其他日期的文件,所以发送三个附件那个邮件,要过滤地区及该地区的不同日期,
3、通配符 添加系统变量没有测试成功,只能想其他解决方案,
3.1、在输出目录新建子目录,A
3.2、三个附件一起发的,三个附件都输出到A目录,
3.3、job里有删除多个文件的控件,每次job执行时,首先删掉A目录下的所有文件,然后该job的后续 转换会生成当天最新的附件excle文件,发送邮件时,发送A目录下所有的文件
3.4、避免过期的excle大量堆积
有个报错,记录下:
.../kettle/data-integration/spoon.sh:行226: /opt/java/jdk1.8.0_171/bin//opt/java/jdk1.8.0_171/bin/java: 没有那个文件或目录
这个就是jdk安装目录的问题,本来好好的,不知道为啥叉劈了
关于表输入:
使用如下图:
这两天搞数据盘点,又要用到这个表输入时,有点问题,
步骤:首先读取excel 然后用javascript做个变量转换,然后用表输入查询数据,最后把查询到的数据输出到excel,最终输出excel里内容也包含部分最初的那个excel里的内容
问题出在javascript和表输入中间,如果表输入里的 “从步骤插入数据” 不选,结果就啥也查不到,如果选了就报错:无效的索引列
表输入里的sql需要用到javascript里定义的一个变量
由于之前的程序目录被运维不小心删掉了,所以整套kettle 程序都要重新部署,包括执行脚本
1、首先,执行kettle 作业的shell脚本
./abc/kitchen.sh -rep=billVerify -job=verifyResultReport -level=Detailed -logfile=/opt/abc/abc/logs/billVerifyReport.log
-rep:kettle的工作空间,linux 在 home\user\.kettle 下的repositories.xml 这个配置文件里配置
-job:实际要执行的作业
2、添加crontab 定时任务执行 这个shell脚本
54 12 * * 0-6 /opt/abc/abc/abc123.sh >> /opt/abc/abc/logs/abc123.log
最终发现 中午12:54时,,abc123.sh 这个脚本并没有执行,,abc123.log 日志文件里也没有记录
,单独执行这个脚本是可以执行成功的,放crontab 里就不行
解决:
1、默认情况下,crontab中执行的日志写在/var/log
ll cron*
查看
less cron
其中能看到执行记录
但是实际脚本并没有被执行,找了网上各种情况,看到有说路径不对的,自己还检查了几遍,然后还不以为意,结果现在发现果然是路径写错了,其中一个目录的拼写错误,应该是 kettle 写成了kettel ,,,曹操他刘备的啊
最后还剩一个问题,报错:data-integration/spoon.sh: line 226: java: command not found
原因是 未找到java安装路径,即spoon.sh 里有个变量 $_PENTAHO_JAVA 是要指向到 已安装的java ,即执行 java -jar 命令
解决方案:
这个网上就很多了
在执行脚本前加上以下命令
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
所以整体的脚本是:
export JAVA_HOME=/opt/java/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
sh /opt/abc/kettle/data-integration/kitchen.sh -rep=billVerify -job=verifyResultReport -level=Detailed -logfile=/opt/abc/kettle/logs/abc.log
#淡定戒骄戒躁淡定#