Kettle Spoon 定义错误处理 捕捉错误(3) 保姆级教程实例 本地错误日志文件或者数据库错误日志记录 添加变量、自定义列、报错日期时间
Kettle Spoon 定义错误处理 捕捉错误 保姆级教程实例 添加变量、自定义列、报错日期时间。包含日志报错的SQL Server和MySQL的建表语句,以及错误日志没有关于报错时间的解决办法。中间通过设置变量,来获取自定义内容,添加执行spoon的文件路径以及转换名称。实现将所有的spoon定时脚本的报错汇总在一个表中而不至于混淆报错对象。错误日志没有关于报错时间的信息的解决办法
Kettle Spoon 定义错误处理(3)-记录Kettle行级报错详情
Kettle Spoon 定义错误处理 捕捉错误 保姆级教程实例 添加变量、自定义列、报错日期时间。包含日志报错的SQL Server和MySQL的建表语句,以及错误日志没有关于报错时间的解决办法。
一、背景
在使用Kettle时,我们可以通过基础而简单的模块操作来实现Kettle任务失败时调用钉钉机器人提醒任务执行异常(Python脚本)。问题在于,这种简单的提醒功能只能告知任务执行失败,却无法帮助我们深入问题。若我们想深入一步查看什么时候哪一步出现了什么问题,它毫无帮助。
为了记录“Kettle执行失败时,什么时间,具体哪一步,出现了什么问题”这种详细的报错信息,我们需要进行更深入的学习。
本文《记录Kettle行级报错详情》的spoon项目步骤包括,Excel输入 --> 表输出 --> 获取变量 --> 文本文件输出/表输出。
实现思路:在表输出执行过程中遇到报错时,通过新增变量来记录当下时间和报错信息,再将记录到行级错误信息的变量输出到日志表或者文本来实现***“Kettle行级错误的记录”***。
注:出于教学目的,本项目对表输出的表增加了唯一键和不为NULL值的表限制。因此,本项目越多次执行,记录出错的效果越佳。
本文的行级错误记录内容包括:脚本路径,时间,错误的转换名称,错误内容,错误代码,错误描述等。看官老爷食用时可酌情添油加醋。
错误日志没有关于报错时间的信息的解决办法:
基本思路如下:
1、对于文本文件输出
新增获取系统信息的步骤,获取系统时间,最后再输出即可。
2、对于表输出
直接在建表时,默认一列时间为当下时间,在插入错误信息时,不做修改即可。
详细内容,参考八、错误日志没有关于报错时间的信息的解决办法
二、步骤总览
在左边的步骤中,分别拉出
1、Excel输入
2、表输出
3、获取变量
4、文本文件输出
5、表输出
按以下图标配置好数据流向(即“跳”)。注:最后的文本文件输出和表输出的数据流向有一虚一实
三、Excel输入
点击跳转获取Excel数据
或者
①将以下数据复制粘贴到Notepad++
②在Notepad++中再次复制粘贴到Excel保存亦可。
date SKU OrderSourceCountry
2024/8/23 10090206 UK
2024/8/23
2024/8/23 10358234 US
2024/8/23 UK
2024/8/23 10515867 UK
2024/8/23 US
2024/8/23 10546368
3.1 Excel输入-文件
双击Excel输入,在弹出来的菜单中,选择文件页面,选择Excel 2007 XLSX (Apache POI),点击浏览,选择对应文件后,点击添加,最后点击确定。(确定可以先不点,因为需要配置工作表和字段。)
3.2 配置工作表
在工作表中,点击获取工作表名称,点击Sheet1,点击箭头>,点击确定,最后点击确定。(可以先不点最后的确定,因为需要配置字段。)
3.3 配置字段
完成工作表的配置之后,字段的配置就很简单。直接点击获取来自头部数据的字段,在点击确认即可。
如果没有出现头部字段名称,则需要手动调整,或者重新配置一下工作表。
四、表输出
4.1 字段映射配置
在表输出中,选择编辑好的数据库,在浏览中选中数据表,勾选指定数据库字段,在数据库字段中,点击获取字段,最后点击确定。
以下是对应该项目的spoon_error_test的MySQL建表语句。
CREATE TABLE `spoon_error_test` (
`ID` int NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`SKU` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`OrderSourceCountry` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `date_sku` (`date`,`SKU`,`OrderSourceCountry`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
4.2 定义错误处理
做好字段映射配置之后,对准表输出,点击右键,选中定义错误处理,在步骤错误处理设置中***,配置好对应列名***,点击确定。
对应行 | 名称 |
---|---|
错误数列名 | err_num |
错误描述列名 | err_desc |
错误列的列名 | err_column |
错误编码列名 | err_code |
五、获取变量
在处理表输出和获取变量之间的数据流方向时,需要选择错误处理步骤。
选中表输出,摁住Shift键,将鼠标拖至获取变量,放开,选择错误处理步骤。
双击获取变量,配置字段名称和自定义内容,点击确定。
对于 $ 开头的变量,可以通过 Ctrl + Alt + space 按出来。
exeDir:${Internal.Entry.Current.Directory}
exeTrsfm:${Internal.Transformation.Name}
self_variable:系统人工listing(自己选择填写的内容作为特殊的标记列)
六、可选输出一:文本文件输出(本地保存)
6.1 配置文件
填写好文件名称,扩展名,点击确定(确定可以先不点,因为需要配置字段)。
在文件名中,选择好路径,若想在当前文件下创建新日志文件。
则可将文件名称写为为:${Internal.Entry.Current.Directory}/错误日志
扩展名:log(可写成txt)
6.2 配置字段
选中字段,选择获取字段,点击确定。
如果前面配置没有问题的话,会出现全部字段内容。
若没有出现全部字段,则需要手动勾选。
比如在点击获取字段后没有出现exeDir,可以点击空白行的名称列,右边有个下拉框,点击可选中exeDir,或者直接填写exeDir即可。
配置完所有字段,点击确定即可。
七、可选输出二:表输出(数据库保存)
7.1 表输出配置
双击表输出,在配置中,选择编辑数据库,或者下拉已编辑好的数据库,点击浏览勾选需要输出的日志表,勾选指定数据库字段,选择数据库字段,点击获取字段,编辑好对应字段后,点击确定。注:注意到,这些输出内容是没有关于时间信息的。单纯的报错内容没有错误时间
ERR_NUM:err_num
ERR_DESC:err_desc
ERR_NAME:err_column
ERR_CODE:err_code
ERR_CURENT_DIR:exeDir
EXE_TRANSFORMATION_NAME:exeTrsfm
REMARK:self_variable
7.2 报错日志的表输出SQL语句
7.2.1 错误日志表的建表语句:SQL Server
-- SQL Server
CREATE TABLE dbo.Spoon_error_records (
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
EXE_TRANSFORMATION_NAME NVARCHAR(100),
EXE_CURRENT_DIR NVARCHAR(100),
ERR_NUM NVARCHAR(20) NULL,
ERR_NAME NVARCHAR(50) NULL,
ERR_DESC NVARCHAR(MAX) NULL,
ERR_CODE NVARCHAR(20) NULL,
CREATE_TIME DATETIME NULL DEFAULT GETDATE(),
REMARK NVARCHAR(200) NULL
);
7.2.1 错误日志表的建表语句:MySQL
CREATE TABLE Spoon_error_records(
ID INT NOT NULL AUTO_INCREMENT COMMENT '唯一编号',
EXE_TRANSFORMATION_NAME VARCHAR(100) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'SPOON报错的转换名称',
EXE_CURRENT_DIR VARCHAR(100) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '错误的JOB所在的路径',
ERR_NUM VARCHAR ( 20 ) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '错误行',
ERR_NAME VARCHAR ( 20 ) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '错误名称',
ERR_DESC longtext CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '错误描述',
ERR_CODE VARCHAR ( 20 ) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '错误码',
CREATE_TIME datetime ( 0 ) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间 ',
REMARK VARCHAR ( 200 ) CHARACTER
SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注,特殊情况说明',
PRIMARY KEY ( ID ) USING BTREE,
INDEX ( CREATE_TIME )
) ENGINE = InnoDB AUTO_INCREMENT = 182 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT = '数据同步错误记录表';
八、错误日志没有报错时间的解决办法
8.1 文本文件输出
基本思路,通过新增获取系统信息新增列字段,最后再内容中输出即可。
在输入中,把获取系统信息步骤拖出来,按图所以做好数据流向。
双击获取系统信息,在名称列中填写nowTime。对于类型,在点击后跳出的列表中选择系统日期(可变),点击确定。
最后,在文本文件输出中,点击获取字段,点击增加新的(n),就可以看到前面填写的nowTime出现在了最后。
对于输出到到获取系统信息的错误处理步骤流向的设置,可以参考五、设置变量。
8.2 表输出
直接在创建表时,新增报错时间,将默认值设置为当前时间即可。
具体可参考7.2 报错日志的表输出SQL语句
设置完所有步骤后,点击运行即可到对应的文件或数据库查看报错内容。
更多推荐
所有评论(0)