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

举报
他们叫我技术总监 发表于 2024/11/02 19:28:09 2024/11/02
【摘要】 前言:今天我们主要来捋一捋kettle中转换对象的执行顺序,按我们正常思维来说,对象总是从左至右执行,比如如下所示的,我们将表输入即读取数据,至表输入即写入数据。就是我们最常见的裁剪表。批量读取一定时间段的数据,进行全量更新,比如更新一天的数据、一个星期、一个月、一年等等。一、转换效率对比从前言中,我们得知,我们日常用的最多的就是使用裁剪表,但是裁剪表有个缺点就是会将输出表中的数据先全部清空...

前言:

今天我们主要来捋一捋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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。