原创文章,转载请注明出处:http://qq85609655.iteye.com/blog/2173882

在kettle.properties中,可以定义参数

KETTLE_JOB_LOG_DB=dw1

KETTLE_JOB_LOG_TABLE=bi_etl_job_log_table

KETTLE_TRANS_LOG_DB=dw1

KETTLE_TRANS_LOG_TABLE=bi_etl_trans_log_table

来全局设置,记录kettle的job和trans日志,

记录日志,会进行锁表,在kettle作业非常多的情况下,容易造成表锁,以及队列等待job日志记录的情况严重影响效率。以及作业的调度。

在trans下有个步骤Set Variables,用于设定变量。

写了个job测试了下,发现,trans日志能够正常记录,但是job日志无法记录。

很纳闷,百思不得其解。想不通,以为是版本的问题,更新到最新版本pdi-ce-5.2.0.0-209,问题依旧。

难道,Kettle的设计Set Variables设置变量,其变量只能用于trans,无法用于job吗?

难道需要每个job都要如上的去进行手动设置嘛,太麻烦了,不想这么搞。

打开Eclipse,查看Kettle源码,跟踪了半天,发现了具体的原因,不知道是不是kettle的Bug,还是因为其使用的思想,修改下源代码,测试了下问题搞定。

我使用的kettle 4.4的版本,需要修改类JobEntryJob.java的方法

public JobMeta getJobMeta(Repository rep, VariableSpace space) throws KettleException {

JobMeta jobMeta = null;

try {

switch(specificationMethod) {

case FILENAME:

jobMeta = new JobMeta((space != null ? space.environmentSubstitute(getFilename()) : getFilename()), rep, null);

break;

case REPOSITORY_BY_NAME:

if (rep != null) {

String realDirectory = environmentSubstitute(getDirectory());

RepositoryDirectoryInterface repositoryDirectory = rep.loadRepositoryDirectoryTree().findDirectory(realDirectory);

if (repositoryDirectory==null) {

throw new KettleException("Unable to find repository directory ["+Const.NVL(realDirectory, "")+"]");

}

jobMeta = rep.loadJob((space != null ? space.environmentSubstitute(getJobName()) : getJobName()), repositoryDirectory, null, null); // reads

} else {

throw new KettleException("Could not execute job specified in a repository since we're not connected to one");

}

break;

case REPOSITORY_BY_REFERENCE:

if (rep != null) {

// Load the last version...

//

jobMeta = rep.loadJob(jobObjectId, null);

} else {

throw new KettleException("Could not execute job specified in a repository since we're not connected to one");

}

break;

default:

throw new KettleException("The specified object location specification method '"+specificationMethod+"' is not yet supported in this job entry.");

}

if (jobMeta != null) {

jobMeta.setRepository(rep);

jobMeta.copyVariablesFrom(this);

}

return jobMeta;

} catch (Exception e) {

throw new KettleException("Unexpected error during job metadata load", e);

}

}

主要添加了代码jobMeta.copyVariablesFrom(this);用于设定添加上个步骤的Set Variables里的变量。

重新运行job,搞定

以后,就可以将每个大job,复杂的job运行日志记录到单独的表中。方面查看job运行情况。

将重新编译后的JobEntryJob.class重新打包到kettle-engine.jar中,Ok!

如果遇到同学刚好使用4.4版本的同学,可以直接将附件中的 JobEntryJob.class.zip解压后,替换kettle-engine.jar中相应的类。

特别提醒,Kettle 5.x版本和Kettle 4.x版本,变化较大,需要根据实际类的方法进行修改。这里,我只贴了Kettle 4.4修改的代码,至于其它版本,同学们可以自己动手。

kettle日志解析_Kettle运行日志记录相关推荐

  1. kettle日志解析_kettle之日志有关方面的总结

    jobmysql 1.job日志sql job日志有三种:数据库 做业日志表:总体的记录oracle 做业项日志表:每一个项目的日志测试 日志通道日志表:spa 第一次配置,由于数据库中尚未这个表,须 ...

  2. 电商数仓DWD层用户行为日志解析

    文章目录 前言 一.页面埋点日志.启动日志结构 二.日志解析的流程 2.1 启动日志表解析(包括注意事项) 2.1.1 解析思路 2.1.2 建表语句 2.1.3 数据导入 2.1.4 注意事项 2. ...

  3. 日志记录到字段变更_Wal日志解析工具开源: Walminer

    作者简介 李传成: 瀚高软件内核研发工程师,主要研究方向为数据库的备份和恢复,对wal日志的原理和应用有较深的理解.自研了wal日志解析工具walminer.pg块恢复工具pg_lightool. 一 ...

  4. IOS闪退日志抓取及日志解析(记录更新ing)

    iOS系统如何查看APP的日志 一.XCode连苹果真机查看运行log 方法一:XCode 1 在mac电脑上安装XCode 2 将苹果手机连到mac电脑, 在苹果手机上点击信任 3 打开XCode, ...

  5. kettle实战-巧用合并记录组件完成业务对账

    kettle实战-巧用合并记录组件轻松完成业务对账 应用场景: 对于互联网公司而言,无论是支付还是其他产品的交易操作都难免会涉及到对账的环节,这是保证公司与支付平台或者公司与渠道之间交易对等的关键.k ...

  6. mysql.err日志分析_Mysql日志解析

    转载:https://www.cnblogs.com/Fly-Wind/p/5674382.html 修改Mysql配置 Mysql配置地址为: C:\Program Files (x86)\MySQ ...

  7. Spark HistoryServer日志解析清理异常

    Spark HistoryServer日志解析&清理异常 一.背景介绍 用户在使用 Spark 提交任务时,经常会出现任务完成后在 HistoryServer(Spark 1.6 和 Spar ...

  8. mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战

    简介 canal,阿里开源工具,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 应用场景 数据库实时备份 业务cache刷新 索引构建和实时维护,例:将商品数据推送到es中构建 ...

  9. FTP服务器日志解析

    2019独角兽企业重金招聘Python工程师标准>>> FTP服务器日志解析 FTP是老牌的文件传输协议,在网络中应用非常广泛.本节就Vsftp服务器的日志进行重点讨论,在本书的FT ...

  10. 操作日志和系统日志分类记录

    操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不和业务逻辑耦合,如何让操作日志的内容易于理解 系统日志和操作日志的区别 系统日志:系统日志主要是为开发排查问题提供依据,一般打 ...

最新文章

  1. CPU对指令长度的判断
  2. static成员函数不能调用non-static成员函数
  3. 初读设计模式-----《design pattern explained》读后感
  4. echart 饼图设置指引线_表示整体和部分的条饼图,走起!|Excel144
  5. c# 值类型数据与引用类型数据
  6. expect实现配置机器信任关系
  7. python列表功能默写_python基础学习——列表list的功能
  8. (1)关于File类你知道多少
  9. hibernate二级缓存(二)二级缓存实现原理简单剖析
  10. php 485通讯协议 编程,485通讯协议程序怎么写(51单片机的485通信程序案例)
  11. 普中28335开发攻略_凌乱的DSP笔记(1)-F28335基础知识
  12. Python发送电子邮件.
  13. 楷书书法规则_毛笔书法楷书的结构规则
  14. C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】
  15. java 中查询余额怎么写_查询余额示例代码
  16. mac 查看 ssh key
  17. 考研计算机西电和大连理工大学教务处,高考或考研,大连理工大学和电子科技大学怎么选?其实很简单...
  18. linux运行python程序
  19. GLMP:任务型对话中全局到局部的记忆指针网络 论文阅读及代码解析
  20. Google 天气预报 API

热门文章

  1. 2018软科世界一流学科排名发布! ”计算机科学与工程“学科表现如何?
  2. C++如何判断一个程序是 死锁 还是 死循环,如何进行问题定位与分析
  3. 未来,我们终将共同沐浴在实时光追之下
  4. SSL基础:13:X.509证书格式介绍
  5. java的jar是什么文件_jar是什么意思,jar文件怎么打开?
  6. ubuntu dns 解析失败
  7. Java进阶(一) Java高效读取大文件,占内存少
  8. 就在昨天,张一鸣宣布卸任字节跳动CEO!
  9. 记录一次 Deadlock found when trying to get lock; try restarting transaction 错误
  10. 计算机考研复试_数据库