ETL中遇到的小问题:Invalid column type

ETL中遇到的小问题:Invalid column type,第1张

时间 :2019-08-23

背景 :业务需求,需将Mysql源库中一表A同步到数仓oracle中,工具依然选用 pentaho kettle 8.2。

问题 :没想到被遇到的一个小问题耽误了许久。

步入正题。

报错如下: Invalid column type:16 

很显然的字段类型不匹配,但因此表的字段过多(40个左右),数据量颇大(近2000W)。通过目测判断可能出错的字段类型: date,time,timestamp,并且一一尝试,但是都一直报错。

在观察报错日志,显然是Boolean,显然是布尔型的报错.....

我在oracle端create此表的时候, 没有根据kettle自动生成的建表SQL 。因为自动生成的往往会有一些小问题。

下图是我在MySQL使用show create table A ,展示的建表语句。 注意我标注的字段 ,就是此字段导致的问题。

如下图,相同的表,相同的字段。

mysql 认为是char(1),但是kettle认为是Boolean。

使用 cast(deleted as char) 此函数处理,就是把deleted转为字符型。 

问题解决。

1 mysql 错误 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'

www.2cto.com

解决办法:关闭防火墙,linux下命令

[root@etl01 bin]# chkconfig --list | grep -i iptables ====check fire wall

iptables0:off 1:off 2:on3:on4:on5:on6:off

[root@etl01 bin]# /sbin/service iptables stop ====stop fire wall

Flushing firewall rules: [ OK ]

Setting chains to policy ACCEPT: nat filter [ OK ]

Unloading iptables modules: [ OK ]

2 报错:1130-host ... is not allowed to connect to this MySql server

解决办法:

授权形式

比如账户为root,密码为root

use mysql

用root账户从任何主机上访问mysql数据库了

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION

如果你想允许用户zz从ip为192.168.1.3的主机连接到mysql服务器,并使用123456作为密码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY '123456' WITH GRANT OPTION

kettle作业在运行一段时间后会报错,原因是mysql会默认每8小时回收一次无用连接。

错误日志如下:

然后你的作业就失败了,必须重新启动kettle才能解决。

经过多次排查,最终解决。

加上 autoReconnect=true 参数

虽然能解决8小时mysql自动丢弃无用连接的问题,但是不能解决mysql宕机后的自动重连。

修改方式,自行百度

例如wait_timeout是8小时,只需把调度周期设为<8小时即可

在kettle5.4测试不通过,在kettle7测试通过。

配置数据源连接时,采用连接池,配置如下

关于连接池参数,kettle使用的是apache dbcp connetions pool.

修改方式,自行百度


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8665152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存