通过CDM从OBS迁移数据到DLI,同样的作业在新版本集群迁移失败?
问题描述
客户通过CDM从OBS迁移到DLI ,使用两个集群分别迁移,源端和目标端以及作业配置都一样,2.6.0版本的CDM集群作业可以迁移成功,2.8.6版本的集群迁移失败。报错作业日志如下图所示。
原因分析
- 将目标端表字段类型biginit改为 string,重新跑作业还是失败,报错内容跟之前一样。
- 配置开启脏数据,重跑作业后作业依旧失败,但是有3条数据已迁移到目标表。
- 通过对比迁移失败的数据记录和成功的距离,怀疑是类型为boolean的字段导致的。
解决方案
将目标端boolean类型字段修改成string 后作业跑成功,因为客户源端boolean类型的字段有空值,从而导致迁移失败。
2.8.6版本CDM集群校验更严格,在处理boolean类型数据的逻辑是:目标端的数据类型是boolean类型,会在插入的时候会去检查,不是true/false就会报错。