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、表输出
按以下图标配置好数据流向(即“跳”)。注:最后的文本文件输出和表输出的数据流向有一
Kettle Spoon 定义错误处理-步骤总览

三、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),点击浏览,选择对应文件后,点击添加,最后点击确定。(确定可以先不点,因为需要配置工作表字段。)
Kettle Spoon 定义错误处理-Excel输入

3.2 配置工作表

在工作表中,点击获取工作表名称,点击Sheet1,点击箭头>,点击确定,最后点击确定。(可以先不点最后的确定,因为需要配置字段。)
Kettle Spoon 定义错误处理-Excel输入-工作表

3.3 配置字段

完成工作表的配置之后,字段的配置就很简单。直接点击获取来自头部数据的字段,在点击确认即可。
如果没有出现头部字段名称,则需要手动调整,或者重新配置一下工作表。
Kettle Spoon 定义错误处理-Excel输入-字段

四、表输出

4.1 字段映射配置

在表输出中,选择编辑好的数据库,在浏览中选中数据表,勾选指定数据库字段,在数据库字段中,点击获取字段,最后点击确定
以下是对应该项目的spoon_error_testMySQL建表语句。

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

Kettle Spoon 定义错误处理-表输出-字段映射配置

4.2 定义错误处理

做好字段映射配置之后,对准表输出,点击右键,选中定义错误处理,在步骤错误处理设置中***,配置好对应列名***,点击确定

对应行名称
错误数列名err_num
错误描述列名err_desc
错误列的列名err_column
错误编码列名err_code

Kettle Spoon 定义错误处理-表输出-定义错误处理

五、获取变量

在处理表输出和获取变量之间的数据流方向时,需要选择错误处理步骤
选中表输出,摁住Shift键,将鼠标拖至获取变量,放开,选择错误处理步骤
双击获取变量,配置字段名称和自定义内容,点击确定

对于 $ 开头的变量,可以通过 Ctrl + Alt + space 按出来。

exeDir${Internal.Entry.Current.Directory}
exeTrsfm${Internal.Transformation.Name}
self_variable系统人工listing(自己选择填写的内容作为特殊的标记列)
Kettle Spoon 定义错误处理-获取变量

六、可选输出一:文本文件输出(本地保存)

6.1 配置文件

填写好文件名称扩展名,点击确定确定可以先不点,因为需要配置字段)。
在文件名中,选择好路径,若想在当前文件下创建新日志文件。
则可将文件名称写为为:${Internal.Entry.Current.Directory}/错误日志
扩展名log(可写成txt

Kettle Spoon 定义错误处理-文本文件输出-文件配置

6.2 配置字段

选中字段,选择获取字段,点击确定
如果前面配置没有问题的话,会出现全部字段内容。
若没有出现全部字段,则需要手动勾选。
比如在点击获取字段后没有出现exeDir,可以点击空白行名称列,右边有个下拉框,点击可选中exeDir,或者直接填写exeDir即可。
配置完所有字段,点击确定即可。
Kettle Spoon 定义错误处理-文本文件输出-字段配置

七、可选输出二:表输出(数据库保存)

7.1 表输出配置

双击表输出,在配置中,选择编辑数据库,或者下拉已编辑好的数据库,点击浏览勾选需要输出的日志表,勾选指定数据库字段,选择数据库字段,点击获取字段,编辑好对应字段后,点击确定注:注意到,这些输出内容是没有关于时间信息的。单纯的报错内容没有错误时间
ERR_NUMerr_num
ERR_DESCerr_desc
ERR_NAMEerr_column
ERR_CODEerr_code
ERR_CURENT_DIRexeDir
EXE_TRANSFORMATION_NAMEexeTrsfm
REMARKself_variable
Kettle Spoon 定义错误处理-表输出

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出现在了最后。
对于输出到获取系统信息错误处理步骤流向的设置,可以参考五、设置变量
Kettle Spoon 定义错误处理-增加报错时间Kettle Spoon 定义错误处理-新增报错时间-文本文件输出

8.2 表输出

直接在创建表时,新增报错时间,将默认值设置为当前时间即可。
具体可参考7.2 报错日志的表输出SQL语句

设置完所有步骤后,点击运行即可到对应的文件或数据库查看报错内容。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐