kettle开发篇-执行SQ脚本避坑-Day3

前言:

今天我们主要来捋一捋kettle中转换对象的执行顺序,按我们正常思维来说,对象总是从左至右执行,比如如下所示的,我们将表输入即读取数据,至表输入即写入数据。就是我们最常见的裁剪表。批量读取一定时间段的数据,进行全量更新,比如更新一天的数据、一个星期、一个月、一年等等。

image.png

image.png

一、转换效率对比

从前言中,我们得知,我们日常用的最多的就是使用裁剪表,但是裁剪表有个缺点就是会将输出表中的数据先全部清空再插入,如果用户正在使用该表的数据,会导致在表输入至表输出的时间内看不到数据,以为是系统BUG或者其他的原因。容易引起用户的误解,因此面对读取插入时间超过3s的转换,一般是不建议采用裁剪表,还是采用先删除部分需要更新的数据,一般会删除一天的数据,再插入一天的数据。因此此时的转换就变成了这样。

image.png

此时如果读取的数据量没有超过1.1w条的时候,我们会发现这种方式还挺好用的,一步将删除和插入全搞定了。同样的按我们的执行逻辑,转换会先执行删除,然后读取数据,然后再插入数据至目标表。如果我们将删除数据的脚步放表输出的后面呢?又会什么执行顺序呢?

image.png

是先表输入-表输出-删除1天的数据?按我们界面的箭头顺序好像是这么回事,但是事实真的是这样嘛?如图所示,此时的执行顺序还是删除1天的数据-表输入-表输出。和上面的执行顺序是一样的,此时你是不是迷惑了,为啥会这样呢?难道是我眼花了?

image.png 二、转换对象的优先级

kettle中转换和作业的执行顺序:

1、一个作业内的转换,是顺序执行的。

2、一个转换内的步骤是并行执行的。

3、作业内不支持事务,转换内支持事务。

根据业务需要,通常需要在转换内顺序执行,小技巧如下:

1、执行SQL脚本是优先于所有步骤

2、使用“阻塞数据直到步骤都完成”,确保其他数据步骤都完成再进行下一步骤。

如果我们不想让执行SQ脚本先执行,有没有办法让他听话呢?答案是一定的,此时我们需要用到阻塞对象,在执行SQ脚本前面安一个智能保安,保安保证前面的对象都执行完以后,再允许执行SQ脚本来运行。大家可以参考如下处理方式,有不懂的欢迎留言讨论,希望本文对你有所帮助。

image.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他们叫我技术总监

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值