【ETL】Pentaho Server日志锁表及ID_BATCH重复问题

本文介绍了在Pentaho Server上遇到的日志锁表和ID_BATCH重复问题,原因在于kettle无法利用数据库自增特性处理ID_BATCH。通过新建辅助表trans_log_counter和设置Pentaho Server,可以解决这个问题。具体步骤包括在数据库创建自增逻辑辅助表和在Pentaho Server中配置更新ID_BATCH的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在pentaho server上配置日志数据库之后,一般会遇到锁表和日志记录重复问题,这两个问题的原因都是因为ID_BATCH字段自增出现错误,按照kettle的设计逻辑,kettle不能预设用户在存储日志时使用何种数据库,所以它不能利用数据库本身的特性对ID_BATCH进行自增操作,而且kettle任务本身是并行运行的,这就导致在写入日志数据时会出现几条重复记录,而且这几条记录ID_BATCH相同,这也是锁表的原因,只要解决ID_BATCH自增问题,以上问题自然解决。

问题修复

pentaho开发团队在发现这个bug后,做了一个不太优美但是很有效的解决方案,既是用户自己编写自增逻辑,因为用户肯定知道自己的数据库,如何做自增。
这里有两个步骤:

1,新建辅助表

这里用mysql/mariadb举例:
在日志存储数据库中新建表trans_log_counter,该表有两个字段:ID(int型,主键,自增),NAME(vchar)。然后插入一条记录ID:10000,NAME:‘LOG_TABLES’,这里ID的值必须大于trans_log表中ID_BATCH最大值。
以后Kettle就利用这个表中的ID字段获取trans_log表中ID_BATCH的值,这样就能保证ID_BATCH的唯一性和自增性。

2,设置pentaho server

在《【ETL】Pentaho Kettle 日志扩展开发》中我讲过如何在pentaho server上设置日志存储,其中有一部是在spoon中新建数据库连接,这里只需要在新建数据库连接时,在option(选项)栏中,新增一个变量
AUTOINCREMENT_SQL_FOR_BATCH_ID
UPDATE trans_log_counter SET ID=LAST_INSERT_ID(ID+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值