程序员的资源宝库

网站首页 > gitee 正文

kettle从入门到精通 第四十一课 kettle 事务(单个转换文件)

sanyeah 2024-04-01 11:57:05 gitee 9 ℃ 0 评论

1、大家都知道,我们在平常写java或者C#等代码时,如果涉及操作多个表时为了保持数据一致性需要开启事务,同样kettle也支持事务,今天我们一起来学习下kettle 单个转换文件内的事务特性。

转换文件中的步骤是并行执行的,每个步骤都打开一个独立的数据库连接并开始一个事务。尽管这样在很多情况下会提高性能,但当不同步骤更新同一个表时,也会带来锁和参照完整性问题。

为解决打开多个连接而产生的问题,Kettle可以在一个事务中完成转换。转换设置对话框的杂项“使用唯一连接”,可以完成此功能。当选中了这个选项,所有步骤里的数据库连接都使用同一个数据库连接。只有所有步骤都正确,转换正确执行,才提交事务,否则回滚事务。

有如下t1和t2 两个表,两个表的name字段长度不一样,其他字段一致。

 

CREATE TABLE `t1` (
   `id` bigint not NULL primary key auto_increment,
   `name` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,
   `createtime` datetime DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

  

 CREATE TABLE `t2` (
    `id` bigint not NULL primary key auto_increment,
   `name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
   `createtime` datetime DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2、通过生成记录步骤生成一条数据,通过复制的方法同时写入t1和t2 两个表,t1写入和t2写入是两个执行sql语句步骤,如下图所示。

 3、生成记录步骤比较简单,一般在测试一些转换的时候可以使用此步骤生产数据。

限制:可以设置产生数据条数。这里设置1条数据。

示例数据:name字段,类型为String,默认值为Java小金刚。

 4、t1写入步骤和t2写入步骤,脚本逻辑一致,只是表名不一样。这里通过?占位符可以把name字段值赋值为?。

 5、当name=Java小金刚时,t1和t2写入成功,因为字段name的长度符合表中name字段长度要求。

 6、 当name=超级无敌Java小金刚,且不开始事务的情况下时,t1写入失败,t2写入成功,因为字段name的长度不符合t1表中name字段长度,字段name的长度不符合t2表中name字段长度。此种情况下每个步骤单独开启一个事务。

7、 当name=超级无敌Java小金刚,且开始事务的情况下时,t1写入失败,t2写入失败。此种情况下两个步骤共享一个事务。

 

 8、 当name=Java小金刚,且开始事务的情况下时,t1写入成功,t2写入成功。此种情况下两个步骤共享一个事务。

 

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表