java集成kettle 8.2 获取转换作业的执行日志与步骤度量
spring boot 2.3.2 kettle 8.2
此文只给个参考,没有完整代码,基本大同小异
日志表sql
CREATE TABLE `etl_job_log` (
`ID_JOB` int(11) DEFAULT NULL,
`CHANNEL_ID` varchar(255) DEFAULT NULL,
`JOBNAME` varchar(255) DEFAULT NULL,
`STATUS` varchar(15) DEFAULT NULL,
`LINES_READ` bigint(20) DEFAULT NULL,
`LINES_WRITTEN` bigint(20) DEFAULT NULL,
`LINES_UPDATED` bigint(20) DEFAULT NULL,
`LINES_INPUT` bigint(20) DEFAULT NULL,
`LINES_OUTPUT` bigint(20) DEFAULT NULL,
`LINES_REJECTED` bigint(20) DEFAULT NULL,
`ERRORS` bigint(20) DEFAULT NULL,
`STARTDATE` datetime DEFAULT NULL,
`ENDDATE` datetime DEFAULT NULL,
`LOGDATE` datetime DEFAULT NULL,
`DEPDATE` datetime DEFAULT NULL,
`REPLAYDATE` datetime DEFAULT NULL,
`LOG_FIELD` mediumtext,
KEY `IDX_wgyth_kettle_log_1` (`ID_JOB`) USING BTREE,
KEY `IDX_wgyth_kettle_log_2` (`ERRORS`,`STATUS`,`JOBNAME`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
CREATE TABLE `etl_trans_log` (
`ID_BATCH` int(11) DEFAULT NULL,
`CHANNEL_ID` varchar(255) DEFAULT NULL,
`TRANSNAME` varchar(255) DEFAULT NULL,
`STATUS` varchar(15) DEFAULT NULL,
`LINES_READ` bigint(20) DEFAULT NULL,
`LINES_WRITTEN` bigint(20) DEFAULT NULL,
`LINES_UPDATED` bigint(20) DEFAULT NULL,
`LINES_INPUT` bigint(20) DEFAULT NULL,
`LINES_OUTPUT` bigint(20) DEFAULT NULL,
`LINES_REJECTED` bigint(20) DEFAULT NULL,
`ERRORS` bigint(20) DEFAULT NULL,
`STARTDATE` datetime DEFAULT NULL,
`ENDDATE` datetime DEFAULT NULL,
`LOGDATE` datetime DEFAULT NULL,
`DEPDATE` datetime DEFAULT NULL,
`REPLAYDATE` datetime DEFAULT NULL,
`LOG_FIELD` mediumtext,
KEY `IDX_wgyth_trans_log_1` (`ID_BATCH`) USING BTREE,
KEY `IDX_wgyth_trans_log_2` (`ERRORS`,`STATUS`,`TRANSNAME`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
1:首先创建转换的时候先配置日志表
//配置日志表
transMeta.getTransLogTable().setTableName(repInitialization.transLog);
2:运行指定转换时,日志已经存到指定日志表中了
通过查询数据库当前执行日志和步骤度量封装返回即可
for (int i = 0; i < trans.nrSteps(); i++) {
List<Object> jsonArray = new ArrayList<>();
StepInterface stepInterface = trans.getRunThread(i);//获得该步骤元数据
StepStatus status = new StepStatus(stepInterface);//获得步骤状态元对象
String[] fields = status.getTransLogFields();//步骤度量状态数据
for (int j = 0; j < fields.length; j++) {
sonArray.add(fields[j]);
}
list.add(jsonArray);
}
//获取执行日志
List<Object[]> bySql = logDao.findBySql("select t.CHANNEL_ID,t.LOG_FIELD from " + transMeta.getTransLogTable().getTableName() + " t where t.CHANNEL_ID =" + "'" + trans.getLogChannelId() + "'");
可以看到我们执行返回的结果中已经带上封装好的度量和日志了
作业获取基本大同小异,封装执行度量和日志返回展示
有二次开发kettle不懂的地方也可以问我,QQ:648267940