本人菜鸡呀~今天再次记录几个kettle的问题!
很早以前,写过一篇kettle的文章,当时是接手了同事的kettle流程,那时候的我完全就是kettle新人啊(虽然现在我的水平也很菜),因此匆忙的写下了几个自己遇见的kettle问题,文章如下:
【记录】几个kettle的问题:https://blog.youkuaiyun.com/lsr40/article/details/82109119
这次,其实也跟上次一样,还是记录几个常见操作
1、数据库查询到的数据,传入到kettle中
业务:跑数据的时候,往往会有一张维表来保存数据跑到哪里了,通过这张表,我就知道接下来要跑哪里的数据。
举个例子:表A是上游表,表B是下游表,上游表的数据到了9月1号,下游表只跑到了8月25号,那么表B就需要跑8月26号一直到9月1号的数据。
那么怎么把这个日期传入到kettle里呢?
案例1:获得表B的最大时间,然后获取表A中最大时间往后的数据。
看图吧~
获取数据的最大时间里获得表B的数据最大时间,然后
“获得需要更新的时间”是一个“表输入”,里面获得了表B中数据的最大时间
接着,在设置变量的ktr里面
然后就可以在任何地方通过${max_date_id}和${month_id}来获取到这两个参数了!!
2、有时候,我们也需要在shell命令调用kettle任务的时候,传入相关的参数
案例2:跑数据的日期从外部传入(shell命令中传入)
在kettle的入口的命名参数里写上外部传入的参数名称
接着在后面搞个获取变量
调用的时候:
$KETTLE_HOME/kitchen.sh -file="/**/**/***数据生成(入口).kjb" --level=Rowleve -param:job_name="***数据生成(入口)" -param:date_id=20190801 -param:date_type=D
3、如何避免重复开启相同的kettle任务
其实我们团队的大佬是用这种方式实现的,先说下实现思路:
每个kettle任务都会给定一个名称,当一个kettle任务开启的时候,如果 ps -ef | grep '想查询的kettle任务的名称',你会发现服务器会返回8条结果给你,其中有一条是你执行ps -ef 的指令(如果把这条结果通过grep -v 去掉,那就是7条)
因此,我每次运行kettle的时候,先判断是否是7条,如果是,证明当前任务只开启了一次,否则就是多次,如果多次,当本次开启就自动不执行任何结果
实现如图:
通过javascript代码,来登录到执行kettle的服务器上执行查询命令
然后通过switch/case来判断接下来执行什么
嗯,就是这样子!
好,我想说的就这么说完了,其实因为界面画的窗口,对于程序员来说一开始会有点不好接受,不过一旦有现成的流程,要去做一些改变,相对来说还是比较简单的~
老话,菜鸡一只,最近也是在写定时同步数据的kettle脚本,所以才跑来总结这篇文章的~
晚上可能要和同事跑去吃自助餐,开心的不行~赶快下班吧!!!