Kettle 事务、转换内顺序、excel模版、使用踩坑

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

 

 
 
#淡定戒骄戒躁淡定#
posted @ 2019-07-11 10:21  飞叶-枯寂  阅读(1938)  评论(0编辑  收藏  举报