最近线上 kettle 报了一个 Unable to get database metadata from this database connection 的错误,网上有一大堆的这个异常解决方案,都尝试过但是并没有解决我的这个异常问题。那要怎么做呢?
下面分享一下我的解决思路:
1:看一下这个输出表的配置MySQL链接相同的其他 job 是否表输出正常???
如果其他 job 不正常,就说明是这个 表输出配置的 MySQL链接出问题了,直接修改该链接即可;
如果其他 job 正常,就这个表输出异常,可以重新再写一个job ,把这个旧的job 替换掉;
如果替换掉的job 正常,说明可能是这个老的job 哪里做了改动,出现了异常情况;
2:如果替换后的 job 也不正常呢???
则说明这个job 配置的表输出根本就没有问题,那么就是表输入的数据落地到表输出表这个环节出了问题!!!!
为了复现这个问题的核心,我们预览了一下表输入,没有问题;
我们再核对了一下表输入的结果字段 和 表输出自动匹配的字段,发现也没问题;
3:那么不是kettle 转换、job 的问题,那到底是什么导致了 Unable to get database metadata from this database connection异常???
此时此刻,我们想到了数据库里的落地表去看看,我们想会不会是表结构里有比较特殊的字段呢???
最容易定位的就是主键问题了,我们把主键给取消掉,重跑了一次kettle job ,居然成功了;
这就是开发的同学SQL写的不严谨导致的根本错误!!!
4:定位到了问题之后就是修复这个bug
我们修改了底层的逻辑、然后把输出表的主键重新加了回去,作业重跑、解决了这个bug.
5: 思考
为啥 kettle 表 输出的时候,并没有报告 主键异常,而是报了个 这个模糊的 Unable to get database metadata from this database connection异常???
这只能说kettle 这个工具在数据开发过程中定位问题存在严重的bug,所以,在这里我再一次严重的申明,企业搞数字化改革,最好上大数据环境,传统的IT手段问题太多,节约了IT成本、却在后续给开发人员造成了很多困惑,得不偿失。。。