解决kettle字符转换错误

解决kettle字符转换错误

▶错误描述

在执行转换抽取数据时,由于姓名、地址等CHAR类型字段中存在特殊字符,造成导演CharConversionException异常。
异常信息如下:

在这里插入图片描述

▶原因分析:

通过对比法分析:同样的表数据抽取,在莱芜数据集市的业务数据会出现此问题,而德州不会。由此可推断出问题原因出在数据上,数据中存在特殊字符。

▶解决方法

前提:根据与业务人员沟通,可以对有问题的数据进行舍弃。所以运用kettle的“定义错误处理”功能。
具体步骤如下:

1.数据准备

创建表A1、B1、C1,并添加数据。SQL如下:

CREATE TABLE A1(
    A VARCHAR(120) NOT NULL,
    B VARCHAR(120),
    C VARCHAR(120));

CREATE TABLE B1(
    A VARCHAR(120),
    B VARCHAR(120) ,
    C VARCHAR(120));

CREATE TABLE C1(
    A VARCHAR(120),
    B VARCHAR(120) ,
    C VARCHAR(120) ,
    errorNum VARCHAR(3000),
    errorDesc VARCHAR(3000),
    errorName VARCHAR(3000),
    errorCode VARCHAR(3000));

INSERT INTO B1 (A, B, C) VALUES ('1', '1', '1');
INSERT INTO B1 (A, B, C) VALUES (null, '2', '2');  --此条数据A字段的值为空。
INSERT INTO B1 (A, B, C) VALUES ('3', '3', '3');
INSERT INTO B1 (A, B, C) VALUES ('4', '4', '4');
INSERT INTO B1 (A, B, C) VALUES ('5', '5', '5');

场景设计:A1表中的A字段为非空字段,B1表中的A字段为可空字段且有A字段为空的数据。
当通过转换把B1表中数据抽取到A1表时,会出现错误,这时批量会出现中断,后面的数据则不会插入到A1表中。
如果通过“定义错误处理”手机可以跳过错误,确保后面的数据可以插入到A1中,则证明此方案可行。

2.创建转换及设置

创建转换,在核心对象中选择“输入”→“表输入”,拖拽到转换中。
如图:

在这里插入图片描述

设置“表输入”并“确定”,“表输入”参数如下图所示:

在这里插入图片描述

以上SQL语句的作用是保证错误数据在数据集中间。
SQL语句如下:

SELECT * FROM QUICK_LOAN.B1 ORDER BY B ASC

在核心对象中选择“输出”→“表输出”,拖拽到转换中,将“表输入”与“表输出”连接。
设置“表输出”并“确定”,“表输出”参数如下图所示:

在这里插入图片描述

保存新建转换,如下图所示:
在这里插入图片描述

运行转换1,报错!如下图所示:

在这里插入图片描述

查看A1表并未插入数据,如下图所示:

在这里插入图片描述

在核心对象中选择“输出”→“表输出”,拖拽到转换中,将“插入到A1表”与“表输出”连接,选择“错误处理步骤”。如下图所示:

在这里插入图片描述

在“插入到A1表”上点击右键,选择“定义错误处理…”,如下图所示:

在这里插入图片描述

在“步骤错误处理设置”窗口中进行设置,并点击“OK",如下图所示:

在这里插入图片描述

errorNum、errorDesc、errorName、errorCode的名字必须与C1表中的字段一致!!!
设置“表输出”并“确定”,“表输出”参数如下图所示:

在这里插入图片描述

在核心对象中选择“流程”→“空操作(什么了不做)”,拖拽到转换中,将“插入到A1”与“空操作(什么了不做)”连接,选择”主输出步骤“。如下图所示:

在这里插入图片描述

在弹出的对话框中选择”分布“。如下图所示:

在这里插入图片描述

保存此转换!!!!并运行转换!!!!最终运行成功!!!

在这里插入图片描述

查询A1表数据,错误的数据没有插入到A1表中。如下图所示:

在这里插入图片描述

查询C1表数据,如下图所示:

在这里插入图片描述

从B1表向A1表抽取插入数据时,报错的数据都会存入C1。

C1中会记录出错数据的主要字段,也会记录kettle返回的异常信息字段如”ERRORDESC“。

至此解决方法成功执行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值