前言
在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 日志扩展开发