【kettle】获取数据库中查询到或者外部传入的参数

本人菜鸡呀~今天再次记录几个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脚本,所以才跑来总结这篇文章的~

晚上可能要和同事跑去吃自助餐,开心的不行~赶快下班吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值